【java笔记】线程间通信(2):生产者和消费者案例分析
【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.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...
- java基础—线程间的通讯 生产者与消费者
线程间的的通讯 生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...
- Java 如何线程间通信,面试被问哭。。。
Java 如何线程间通信,曾经小编面试被问哭的一道题.. 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及 ...
- 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...
- Java并发——线程间通信与同步技术
传统的线程间通信与同步技术为Object上的wait().notify().notifyAll()等方法,Java在显示锁上增加了Condition对象,该对象也可以实现线程间通信与同步.本文会介绍有 ...
- java实现线程间通信的四种方式
synchronized同步 public class MyObject { synchronized public void methodA() { //do something.... } syn ...
- 【Java从零到架构师第1季】【并发 Concurrent 03】线程间通信_ReentrantLock_线程池
持续学习&持续更新中- 守破离 [Java从零到架构师第1季][并发 Concurrent 03]线程间通信_ReentrantLock_线程池 线程间通信 线程间通信-示例 可重入锁Reen ...
- Java多线程:线程间通信之volatile与sychronized
由前文Java内存模型我们熟悉了Java的内存工作模式和线程间的交互规范,本篇从应用层面讲解Java线程间通信. Java为线程间通信提供了三个相关的关键字volatile, synchronized ...
- 抖音最后一面,问我Java 是如何实现线程间通信的?
线程之间到底使用什么沟通的呢?如何把数值变化传递给其他子线程? 来源:blog.csdn.net/lanxian837820149/article/details/101479004 MarkerHu ...
最新文章
- 【Java】数据结构之 顺序表(MyArrayList)
- 解决pip更新问题。 You are using pip version 19.0.3, however version 19.1 is available.
- java irowset行数,Java CloneableRecord.put方法代码示例
- H3C交换机配置本地和远程登录用户名和密码
- uboot中设置MAC地址,重启不丢失
- 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
- 计算机的好处英语,电脑的好处英语演讲稿
- 小白兔想的飞鸽传书(173dmba)安卓版
- 30个php操作redis常用方法代码例子
- C语言/C++常见字符串函数
- java调用linux系统命令_java 调用linux系统命令
- 如何压缩jpg图片的大小
- win10 家庭版cmd命令打开超级管理员和关闭超级管理员
- linux文件操作命令包括,学习Linux命令之最基本的文件操作
- et文件怎么转成excel_excel怎么转换成word格式的文件格式?这些方法应该掌握!...
- 爬取指定网页并制作词云图
- 卫星各个波段的说明及用途(C/Ku/Ka/S/L)
- jsp层级选择器_jQuery 选择器
- 问题解决:[/usr/lib/systemd/system/etcd.service:6] Missing ‘=‘.
- ROP Emporium x86_64 1~6题
热门文章
- C#多屏幕显示器编程
- POJ1182 食物链【并查集】
- 语言的学习 —— 西班牙语(español)
- 经典卷积神经网络的学习(二)—— VGGNet
- 对角矩阵(diagonal matrix)
- matlab 格式化输出
- C++ const型成员函数与 non-const型成员函数 (二)
- 实用的工具 —— 百度云、everything(全局搜索)、Everest(硬件检测)、TechPowerUp GPU-Z
- python编程入门 适合于零基础朋友-零基础能学好python吗?教女朋友学python是送命题吗?...
- 开课吧python小课学了有用吗-考研人注意了,停下手头的活,再忙也要看一下这个!...