线程wait notify练习

包子实体类

public class BaoZi {
    String pi;
    String xian;
    boolean flag=false;
}

包子铺

public class BaoZiPu extends Thread{
    private BaoZi bz;
    public BaoZiPu(BaoZi bz){
        this.bz=bz;
    }

    @Override
    public void run(){
        int count=0;
        synchronized (bz){//同步
            if (bz.flag==true){
                try {
                    bz.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            if (count%2==0){
                bz.pi="薄皮";
                bz.xian="牛肉";
            }
            else {
                bz.pi="冰皮";
                bz.xian="猪肉";
            }
            count++;
            System.out.println("正在做"+bz.pi+bz.xian+"包子");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            bz.flag=true;
            bz.notify();//唤醒进程
            System.out.println("有包子了");

        }
    }
}

消费者

public class Customer extends Thread{

    private BaoZi bz;

    public Customer(BaoZi bz){
        this.bz=bz;
    }
    @Override
    public void run(){
        synchronized (bz){
            if (bz.flag==false){
                try {
                    bz.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }


            System.out.println("正在吃包子");
            bz.flag=false;
            bz.notify();
            System.out.println("包子吃完了,请继续生产");
        }
    }


}

start

public class start_main {
    public static void main(String[] args) {
        BaoZi baoZi=new BaoZi();
        new BaoZiPu(baoZi).start();
        new Customer(baoZi).start();
    }
}

waitAndNotify

public class WaitAndNotify {
    public static void main(String[] args) {
        Object obj =new Object();

        //创建顾客线程
        new Thread(){
            @Override
            public void run(){
                synchronized (obj){
                    System.out.println("告诉老板要的包子种类和数量");
                    try {
                        obj.wait();
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }

                    //唤醒之后运行的代码
                    System.out.println("包子做好了");
                }
            }
        }.start();

        //创建老板线程
        new Thread(){
            @Override
            public void run(){

                try {
                    Thread.sleep(5000);//睡眠五秒做包子
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (obj){
                    System.out.println("老板五秒之后做好包子");
                    obj.notify();
                }
            }
        }.start();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值