【多线程】小二上菜经典案例详解线程通信技术

经典案例

厨师,顾客,小二。

厨师和顾客两个线程任务是有关系的。

顾客来了,点了鱼香肉丝,厨师就做鱼香肉丝。

顾客没来,厨师就等待。

厨师(线程任务类)
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();
    }
}

通过查看测试结果可知,完成了厨师线程任务与顾客线程任务的通信,一比一。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值