多线程-等待唤醒
作者:互联网
等待唤醒
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