【java笔记】线程间通信(1):等待唤醒机制_m0_52043808的博客-CSDN博客

类:

资源类:包子类:皮,馅,有无

生产者:

包子铺类(线程类)(继承Thread)

设置线程任务(run):生产包子

对包子的状态进行判断:true ,包子铺调用wait方法进入等待状态

false,包子铺生成包子,false改为true,唤醒吃货线程

消费者:

吃货类:是一个线程类,可以继承Thread

设置线程任务(run):吃包子

对包子的状态进行判断,false,吃货线程调用wait方法进入等待状态。true,吃包子,修改包子状态false,唤醒包子铺线程。

测试类:

main方法:创建包子对象;创建包子铺线程,开启;创建吃货线程,开启;

注意:

包子铺线程和吃货线程是通信关系,必须用同步技术包子两个线程只有一个正在执行,锁对象必须保证唯一,可以使用包子对象作为参数传递进来。

1、需要在成员位置创建一个包子变量

2、使用带参数构造方法,为这个包子变量赋值?

2、使用带参数构造方法,为这个包子变量赋值

包子类:

public class BaoZi {String pi;String xian;boolean flag=false;
}

包子铺类:

public class BaoZiPu extends Thread{private BaoZi bz;public BaoZiPu(BaoZi bz){this.bz=bz;}//生产包子@Overridepublic void run() {int count=0;while(true){synchronized (bz){if(bz.flag==true){try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}if(count%2==0){bz.pi="薄皮";bz.xian="三鲜馅";}else{bz.pi="冰皮";bz.xian="牛肉大葱馅";}count++;System.out.println("包子铺正在生产"+bz.pi+bz.xian+"包子");try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}bz.flag=true;bz.notify();System.out.println("包子铺已经生产好了"+bz.pi+bz.xian+"包子");}}}}

吃货类:

package 面向对象;public class ChiHuo extends Thread{private BaoZi bz;public ChiHuo(BaoZi bz){this.bz=bz;}@Overridepublic void run() {while(true) {synchronized (bz) {if (bz.flag == false) {try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("吃货正在吃" + bz.pi + bz.xian + "包子");bz.flag = false;bz.notify();System.out.println("吃货已经把" + bz.pi + bz.xian + "吃完了");}}}
}

测试类:

public class Demo {public static void main(String[] args) {BaoZi bz=new BaoZi();new BaoZiPu(bz).start();new ChiHuo(bz).start();}
}

【java笔记】线程间通信(2):生产者和消费者案例分析相关推荐

  1. 多线程-线程间通信-多生产者多消费者示例

    1.多线程-线程间通信-多生产者多消费者问题 多生产者和多消费者.等待唤醒机制. 产生了两个问题: 1.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...

  2. java基础—线程间的通讯 生产者与消费者

    线程间的的通讯  生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...

  3. Java 如何线程间通信,面试被问哭。。。

    Java 如何线程间通信,曾经小编面试被问哭的一道题.. 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及 ...

  4. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  5. Java并发——线程间通信与同步技术

    传统的线程间通信与同步技术为Object上的wait().notify().notifyAll()等方法,Java在显示锁上增加了Condition对象,该对象也可以实现线程间通信与同步.本文会介绍有 ...

  6. java实现线程间通信的四种方式

    synchronized同步 public class MyObject { synchronized public void methodA() { //do something.... } syn ...

  7. 【Java从零到架构师第1季】【并发 Concurrent 03】线程间通信_ReentrantLock_线程池

    持续学习&持续更新中- 守破离 [Java从零到架构师第1季][并发 Concurrent 03]线程间通信_ReentrantLock_线程池 线程间通信 线程间通信-示例 可重入锁Reen ...

  8. Java多线程:线程间通信之volatile与sychronized

    由前文Java内存模型我们熟悉了Java的内存工作模式和线程间的交互规范,本篇从应用层面讲解Java线程间通信. Java为线程间通信提供了三个相关的关键字volatile, synchronized ...

  9. 抖音最后一面,问我Java 是如何实现线程间通信的?

    线程之间到底使用什么沟通的呢?如何把数值变化传递给其他子线程? 来源:blog.csdn.net/lanxian837820149/article/details/101479004 MarkerHu ...

最新文章

  1. 【Java】数据结构之 顺序表(MyArrayList)
  2. 解决pip更新问题。 You are using pip version 19.0.3, however version 19.1 is available.
  3. java irowset行数,Java CloneableRecord.put方法代码示例
  4. H3C交换机配置本地和远程登录用户名和密码
  5. uboot中设置MAC地址,重启不丢失
  6. 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
  7. 计算机的好处英语,电脑的好处英语演讲稿
  8. 小白兔想的飞鸽传书(173dmba)安卓版
  9. 30个php操作redis常用方法代码例子
  10. C语言/C++常见字符串函数
  11. java调用linux系统命令_java 调用linux系统命令
  12. 如何压缩jpg图片的大小
  13. win10 家庭版cmd命令打开超级管理员和关闭超级管理员
  14. linux文件操作命令包括,学习Linux命令之最基本的文件操作
  15. et文件怎么转成excel_excel怎么转换成word格式的文件格式?这些方法应该掌握!...
  16. 爬取指定网页并制作词云图
  17. 卫星各个波段的说明及用途(C/Ku/Ka/S/L)
  18. jsp层级选择器_jQuery 选择器
  19. 问题解决:[/usr/lib/systemd/system/etcd.service:6] Missing ‘=‘.
  20. ROP Emporium x86_64 1~6题

热门文章

  1. C#多屏幕显示器编程
  2. POJ1182 食物链【并查集】
  3. 语言的学习 —— 西班牙语(español)
  4. 经典卷积神经网络的学习(二)—— VGGNet
  5. 对角矩阵(diagonal matrix)
  6. matlab 格式化输出
  7. C++ const型成员函数与 non-const型成员函数 (二)
  8. 实用的工具 —— 百度云、everything(全局搜索)、Everest(硬件检测)、TechPowerUp GPU-Z
  9. python编程入门 适合于零基础朋友-零基础能学好python吗?教女朋友学python是送命题吗?...
  10. 开课吧python小课学了有用吗-考研人注意了,停下手头的活,再忙也要看一下这个!...