生产者和消费者模式

package cn.itcast.demo16.Demo10.WaitAndNotify;

import jdk.internal.org.objectweb.asm.tree.TryCatchBlockNode;

/**
* @author newcityman
* @date 2019/7/24 - 22:18
* 等待和唤醒案列:线程之间的通信
* 创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait方法,放弃cpu的执行,进入到waiting状态
* 创建一个老板线程(生产者):花了5s做包子,组好包子之后,调用notify()方法,唤醒顾客吃
* <p>
* 注意:
* 1、顾客和老板线程必须使用同步代码块包裹起来,保证等待和唤醒只能一个在执行
* 2、同步是使用的锁对象必须唯一
* 3、只有锁的对象才能调用wait和notify方法
*/
public class Demo01WaitAndNotify {
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 (Exception e) {
e.printStackTrace();
}
//唤醒之后,程序的执行代码
System.out.println("开吃");
System.out.println("=====================");
}
}
}
}.start();

//创建一个消费者(顾客)
new Thread() {
@Override
public void run() {
while (true) {
//花5s做包子
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (obj) {
System.out.println("包子做好了,请顾客就餐。");
//做好包子,调用notify方法,唤醒顾客就餐
obj.notify();
}
}
}
}.start();
}
}
原文地址:https://www.cnblogs.com/newcityboy/p/11241394.html