Java线程等待和唤醒

锁对象 调用wait方法使线程等待 调用notify方法唤醒进程

注: 两证方法只能使用锁对象调用

package demo3_WaitAndNotify;

//顾客和老板线程必须使用同步代码块包裹起来 保证线程和唤醒只能有一个在执行
//同步使用的锁对象必须保证唯一
//只有锁对象才能调用wait和 notify方法

public class demo01_WN {
    public static void main(String[] args) {
        Object obj=new Object();
        new Thread(){
            @Override
            public void run() {
                synchronized (obj){
                    System.out.println("告知老板包子的种类和数量");
                    //调用wait方法
                    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();
    }
}

package demo3_WaitAndNotify;


/*
* 进入TimeWaiting(计时等待)有两种方式
* 1,sleep(long m)方法 在毫秒值结束之后 线程睡醒进入Runable/Blocked状态
* 2,使用wait(long m)方法 wait方法如果在毫秒值结束之后 还没有被notify唤醒 就会自动醒来 线程睡醒进入到Runanle/Blocked状态
* 3.notify() 随机唤醒一个线程 唤醒全部线程*/

public class demo02_WN {
    public static void main(String[] args) {
        Object obj=new Object();
        new Thread(){
            @Override
            public void run() {
                synchronized (obj){
                    System.out.println("告知老板包子的种类和数量");
                    //调用wait方法
                    try{
                        obj.wait(5000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    //被唤醒之后 执行的代码
                    System.out.println("吃包子");
                }
            }
        }.start();
        new Thread(){
            @Override
            public void run() {
                synchronized (obj){
                    System.out.println("告知老板包子的种类和数量");
                    //调用wait方法
                    try{
                        obj.wait(5000);
                    }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.notifyAll();
                }
            }
        }.start();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值