package com.chunzhi.Test10WaitAndNotify;
/*
等待唤醒案例:线程之间的通信
创建一个顾客线程:告知老板要的包子种类和数量,调用wait方法,放弃cpu执行权,进入到WAITING状态(无限等待)
创建一个老板线程:花了5秒做包子,做好包子之后,调用notify方法,唤醒顾客吃包子
*/
public class Test01WaitAndNotify {
public static void main(String[] args) {
// 创建一个锁对象
Object obj = new Object();
// 创建匿名顾客线程
new Thread() {
@Override
public void run() {
while (true) {
// 保证等待和唤醒的线程只能有一个执行,需要使用同步技术
synchronized (obj) {
System.out.println("告知老板包子的种类和数量");
// 进行线程等待,等待老板做包子
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 被notify方法唤醒后执行的代码
System.out.println("顾客开始吃包子");
System.out.println("------------------");
}
}
}
}.start();
// 创建匿名老板线程
new Thread() {
@Override
public void run() {
while (true) {
// 做包子需要3秒钟
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 保证等待和唤醒的线程只能有一个执行,需要使用同步技术
synchronized (obj) {
System.out.println("老板花了3秒做好了包子,可以开吃了");
// 包子做好后,使用notify方法唤醒顾客吃包子
obj.notify();
}
}
}
}.start();
}
}