zoukankan      html  css  js  c++  java
  • 生产者和消费者模式

    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();
    }
    }
  • 相关阅读:
    C#中将全部代码一次性折叠
    C#中图片单击旋转事件
    块参照重命名
    补强圈设计
    c# winform 按名称取得控件
    获得某控件的父控件(容器)中的所有控件
    回车键当Tab键使用
    替换CAD中原有命令为开发人员自己开发的命令的方法
    窗体设置
    判断控件的tag是否为空的方法
  • 原文地址:https://www.cnblogs.com/newcityboy/p/11241394.html
Copyright © 2011-2022 走看看