经典案例
厨师,顾客,小二。
厨师和顾客两个线程任务是有关系的。
顾客来了,点了鱼香肉丝,厨师就做鱼香肉丝。
顾客没来,厨师就等待。
厨师(线程任务类)
1、等顾客。
2、做菜。
3、通知小二上菜。
顾客(线程任务类)
1、上门。
2、等菜。
3、吃菜。
4、通知小二报菜。
1、顾客上门
汤臣一品由汤臣集团有限公司开发的楼盘,位于上海市陆家嘴滨江大道旁。占地2万多平方米,总建筑面积达11.5万多平方米,由4幢极为豪华的滨江住宅和1幢高级会所组成,最高楼层为44层,高度达153米。
loser老王一直梦想在汤臣一品有一套房子。
有事没事就喜欢去售楼处逛逛,关心一下房价有没有上涨,毕竟他已经攒了18万年的钱了。
月薪一千二的他经历了三皇五帝,春秋战国,元宋明清,从记事起就在攒钱的老王,终于,攒够了一个汤臣一品的卫生间。
历尽艰辛的老王脑子里一直有几个疑问,售楼处小姐姐眼高手低,不肯告诉他,电视机前的观众朋友们,有知道的告诉他吧。
物业费可以分期付吗
有电梯吗
可以开五菱宏光mini进去吗
坐公交车方便吗
小区里有沙县小吃吗,没有的话,我就得考虑考虑了
里边环境好不好,要饭的话,市场前景如何
2、厨师做菜
package lao.ben.juc.bun;
public class Hotel implements Runnable {
XiaoEr xiaoEr;
public Hotel(XiaoEr xiaoEr) {
this.xiaoEr = xiaoEr;
}
public void run() {
while (true) {
synchronized (xiaoEr) {
if (xiaoEr.flag) {
try {
xiaoEr.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("厨师做了鱼香肉丝。");
xiaoEr.flag = true;
xiaoEr.notify();
}
}
}
}
3、顾客吃菜
package lao.ben.juc.bun;
public class Guest implements Runnable {
XiaoEr xiaoEr;
public Guest(XiaoEr xiaoEr) {
this.xiaoEr = xiaoEr;
}
public void run() {
while (true) {
synchronized (xiaoEr) {
if (!xiaoEr.flag) {
try {
xiaoEr.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("客人吃了鱼香肉丝,并说真难吃,一点鱼肉都没有。");
xiaoEr.flag = false;
xiaoEr.notify();
}
}
}
}
4、小二上菜
package lao.ben.juc.bun;
public class XiaoEr {
//小二手上没菜
boolean flag = false;
}
5、真难吃
package lao.ben.juc.bun;
public class BunTest {
public static void main(String[] args) throws InterruptedException {
XiaoEr xiaoEr = new XiaoEr();
Hotel xiaoErPu = new Hotel(xiaoEr);
Guest chiHuo = new Guest(xiaoEr);
new Thread(xiaoErPu).start();
new Thread(chiHuo).start();
}
}
通过查看测试结果可知,完成了厨师线程任务与顾客线程任务的通信,一比一。