package local.tea;
import local.tea.Tea.Flavor;
public class InfuseMan extends TTobj {
public InfuseMan(String name) {
super(name);
}
public void takeTea(Flavor flavor, TeacupTray tt) {
tt.setTea(new Tea(flavor));
System.out.println(name + " 沏了一杯 " + flavor );
TeaStall.releaseInfuseMan(this);
}
}
package local.tea;
public class TTobj {
protected String name;
public TTobj(String name) {
this.name = this.getClass().getSimpleName() + name;
}
}
package local.tea;
public class Tea {
public static enum Flavor {
西湖龙井, 洞庭碧螺春, 白毫银针, 君山银针, 黄山毛峰, 武夷岩茶, 安溪铁观音, 信阳毛尖, 庐山云雾, 六安瓜片
}
private Flavor flavor;
public Tea(Flavor flavor) {
this.setFlavor(flavor);
}
public void setFlavor(Flavor flavor) {
this.flavor = flavor;
}
public Flavor getFlavor() {
return flavor;
}
}
package local.tea;
public class TeaClient extends TTobj implements Runnable {
Tea.Flavor favoriteFlavor = Tea.Flavor.六安瓜片;
public TeaClient(String string) {
super(string);
System.out.println(this.name + " 大驾光临");
}
public TeaClient(String name, Tea.Flavor flavor) {
this(name);
favoriteFlavor = flavor;
}
@Override
public void run() {
Tea tea = null;
Waiter waiter = null;
try {
System.out.println(name + " 小二!沏杯茶!" + favoriteFlavor);
waiter = TeaStall.takeWaiter();
waiter.takeOrder(favoriteFlavor);
tea = waiter.takeTea();
} catch (InterruptedException e) {
System.out.println(name + " 没人理我啊!我愤然离开!" + e.getStackTrace());
return;
}
System.out.println(name + " 品尝并称赞着 " + tea.getFlavor());
if (waiter != null) {
waiter.release();
}
System.out.println(name + " 我走啦~");
}
}
package local.tea;
public class TeaMenu {
Tea tea;
}
package local.tea;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class TeaStall {
private static String name = "有家茶庄";
public static final int CLIENT_MAX_NUM = 5;
private static BlockingQueue<InfuseMan> infuseMen = new ArrayBlockingQueue<InfuseMan>(
1);
private static BlockingQueue<Waiter> waiters = new ArrayBlockingQueue<Waiter>(
1);
/**
* @param args
*/
public static void main(String[] args) {
waiters.add(new Waiter("【小二张】"));
infuseMen.add(new InfuseMan("【烹煮沏】"));
System.out.println(name + " 开门啦");
new Thread(new TeaClient("【梁朝伟】")).start();
new Thread(new TeaClient("【刘嘉玲】", Tea.Flavor.武夷岩茶)).start();
System.out.println(name + " 打烊啦");
}
public static Waiter takeWaiter() throws InterruptedException {
return waiters.take();
}
public static void releaseWaiter(Waiter waiter) {
waiters.add(waiter);
}
public static InfuseMan takeInfuseMan() throws InterruptedException {
return infuseMen.take();
}
public static void releaseInfuseMan(InfuseMan im) {
infuseMen.add(im);
}
}
package local.tea;
public class Waiter extends TTobj {
public Waiter(String name) {
super(name);
}
Tea.Flavor order;
TeacupTray tt = new TeacupTray();
public void takeOrder(Tea.Flavor order) throws InterruptedException {
this.order = order;
System.out.println(name + " 这位爷您点了 " + order);
TeaStall.takeInfuseMan().takeTea(this.order, tt);
}
public Tea takeTea() {
System.out.println(name + " 茶来啦 ");
return tt.getTea();
}
public void release() {
TeaStall.releaseWaiter(this);
}
}
class TeacupTray {
private Tea tea;
public Tea getTea() {
return tea;
}
public void setTea(Tea tea) {
this.tea = tea;
}
}package local.tea;
import local.tea.Tea.Flavor;
public class InfuseMan extends TTobj {
public InfuseMan(String name) {
super(name);
}
public void takeTea(Flavor flavor, TeacupTray tt) {
tt.setTea(new Tea(flavor));
System.out.println(name + " 沏了一杯 " + flavor );
TeaStall.releaseInfuseMan(this);
}
}
package local.tea;
public class TTobj {
protected String name;
public TTobj(String name) {
this.name = this.getClass().getSimpleName() + name;
}
}
package local.tea;
public class Tea {
public static enum Flavor {
西湖龙井, 洞庭碧螺春, 白毫银针, 君山银针, 黄山毛峰, 武夷岩茶, 安溪铁观音, 信阳毛尖, 庐山云雾, 六安瓜片
}
private Flavor flavor;
public Tea(Flavor flavor) {
this.setFlavor(flavor);
}
public void setFlavor(Flavor flavor) {
this.flavor = flavor;
}
public Flavor getFlavor() {
return flavor;
}
}
package local.tea;
public class TeaClient extends TTobj implements Runnable {
Tea.Flavor favoriteFlavor = Tea.Flavor.六安瓜片;
public TeaClient(String string) {
super(string);
System.out.println(this.name + " 大驾光临");
}
public TeaClient(String name, Tea.Flavor flavor) {
this(name);
favoriteFlavor = flavor;
}
@Override
public void run() {
Tea tea = null;
Waiter waiter = null;
try {
System.out.println(name + " 小二!沏杯茶!" + favoriteFlavor);
waiter = TeaStall.takeWaiter();
waiter.takeOrder(favoriteFlavor);
tea = waiter.takeTea();
} catch (InterruptedException e) {
System.out.println(name + " 没人理我啊!我愤然离开!" + e.getStackTrace());
return;
}
System.out.println(name + " 品尝并称赞着 " + tea.getFlavor());
if (waiter != null) {
waiter.release();
}
System.out.println(name + " 我走啦~");
}
}
package local.tea;
public class TeaMenu {
Tea tea;
}
package local.tea;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class TeaStall {
private static String name = "有家茶庄";
public static final int CLIENT_MAX_NUM = 5;
private static BlockingQueue<InfuseMan> infuseMen = new ArrayBlockingQueue<InfuseMan>(
1);
private static BlockingQueue<Waiter> waiters = new ArrayBlockingQueue<Waiter>(
1);
/**
* @param args
*/
public static void main(String[] args) {
waiters.add(new Waiter("【小二张】"));
infuseMen.add(new InfuseMan("【烹煮沏】"));
System.out.println(name + " 开门啦");
new Thread(new TeaClient("【梁朝伟】")).start();
new Thread(new TeaClient("【刘嘉玲】", Tea.Flavor.武夷岩茶)).start();
System.out.println(name + " 打烊啦");
}
public static Waiter takeWaiter() throws InterruptedException {
return waiters.take();
}
public static void releaseWaiter(Waiter waiter) {
waiters.add(waiter);
}
public static InfuseMan takeInfuseMan() throws InterruptedException {
return infuseMen.take();
}
public static void releaseInfuseMan(InfuseMan im) {
infuseMen.add(im);
}
}
package local.tea;
public class Waiter extends TTobj {
public Waiter(String name) {
super(name);
}
Tea.Flavor order;
TeacupTray tt = new TeacupTray();
public void takeOrder(Tea.Flavor order) throws InterruptedException {
this.order = order;
System.out.println(name + " 这位爷您点了 " + order);
TeaStall.takeInfuseMan().takeTea(this.order, tt);
}
public Tea takeTea() {
System.out.println(name + " 茶来啦 ");
return tt.getTea();
}
public void release() {
TeaStall.releaseWaiter(this);
}
}
class TeacupTray {
private Tea tea;
public Tea getTea() {
return tea;
}
public void setTea(Tea tea) {
this.tea = tea;
}
}
=========================
运行结果:
有家茶庄 开门啦
TeaClient【梁朝伟】 大驾光临
TeaClient【刘嘉玲】 大驾光临
TeaClient【梁朝伟】 小二!沏杯茶!六安瓜片
Waiter【小二张】 这位爷您点了 六安瓜片
InfuseMan【烹煮沏】 沏了一杯 六安瓜片
Waiter【小二张】 茶来啦
TeaClient【梁朝伟】 品尝并称赞着 六安瓜片
TeaClient【梁朝伟】 我走啦~
有家茶庄 打烊啦
TeaClient【刘嘉玲】 小二!沏杯茶!武夷岩茶
Waiter【小二张】 这位爷您点了 武夷岩茶
InfuseMan【烹煮沏】 沏了一杯 武夷岩茶
Waiter【小二张】 茶来啦
TeaClient【刘嘉玲】 品尝并称赞着 武夷岩茶
TeaClient【刘嘉玲】 我走啦~
温馨提示:答案为网友推荐,仅供参考