生产者和消费者模式

mac2022-06-30  32

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

最新回复(0)