生产者和消费者


/**
 * 生产者和消费者
 */
public class Demo {
    public static void main(String[] args) {
        Cooker cooker = new Cooker();
        cooker.setName("厨师:");

        Foodie foodie = new Foodie();
        foodie.setName("吃货:");

        cooker.start();
        foodie.start();


    }
}

=================


/**
 * 厨师
 *
 * @author silence
 */
public class Cooker extends Thread {
    @Override
    public void run() {
        while (true) {
            synchronized (Desk.LOCK) {
                //判断汉堡包数量,如果为0 跳出
                if (Desk.count == 0) {
                    break;
                } else {
                    //如果汉堡包不为0 则判断生成的汉堡包是否被吃货吃掉
                    if (Desk.flag) {
                        try {
                            //如果有汉堡,等待(等待消费者吃掉,叫醒厨师)
                            Desk.LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } else {
                        //如果生产的汉堡包被消费者 吃掉了,就做汉堡包,
                        System.out.print(getName());
                        System.out.println("在做汉堡包" + Desk.count);
                        //标记汉堡包做好了
                        Desk.flag = true;
                        //叫醒消费者
                        Desk.LOCK.notifyAll();
                    }
                }
            }
        }
    }
}

=============


public class Desk {
    /**
     * true 代表有汉堡包,  false 代表没有汉堡包
     */
    public static boolean flag = false;
    /**
     * 吃汉堡包的数量
     */
    public static int count = 10;
    /**
     * 锁对象
     */
    public static final Object LOCK = new Object();
}

==================


public class Foodie extends Thread {
    @Override
    public void run() {
        while (true) {
            synchronized (Desk.LOCK) {
                //判断汉堡包数量,如果为0 跳出
                if (Desk.count == 0) {
                    break;
                } else {
                    //如果汉堡包不为0 则判断是否有汉堡包,如果有为true
                    if (Desk.flag) {
                        System.out.print(getName());
                        System.out.println("在吃汉堡包");
                        //吃掉汉堡包了,标记为false
                        Desk.flag = false;
                        //吃掉一个汉堡包,在总数减一
                        Desk.count--;
                        //叫醒厨师
                        Desk.LOCK.notifyAll();
                    } else {
                        try {
                            //如果没有汉堡包,消费者等待。厨师做好了,会叫醒
                            Desk.LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silence丶你的名字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值