其他分享
首页 > 其他分享> > 多线程-等待唤醒

多线程-等待唤醒

作者:互联网

等待唤醒

Wating状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态

做一个案例来演示

案例分析

 

 

创建一个顾客线程(消费者):告知老板要的包子的种类和数量 调用wait方法 放弃cpu的执行 进入到WAITING状态(无限等待)

创建一个老板线程(生产者):花了5秒做包子 做好包子之后 调用notify方法 唤醒顾客吃包子

代码实现

注意:

顾客和老板线程必须使用同步代码块包裹起来 保证等待和唤醒只能由一个执行

同步使用的锁对象必须保证唯一

只有锁对象才能调用wait和notify方法

代码:

public class DemoWait {
public static void main(String[] args) {
Object o=new Object();
//顾客线程
new Thread(){
@Override
public void run() {
//创建同步锁
synchronized (o){
System.out.println("告知老板要的包子的种类和数量");
try {
o.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 (o){
System.out.println("包子做好了");
//唤醒上一个线程
o.notify();
}
}
}.start();
}
}

运行结果:

 

标签:唤醒,System,包子,线程,notify,多线程,等待,public
来源: https://www.cnblogs.com/aimz01/p/16469419.html