测试生产者消费者问题2-信号灯法,标志位解决(Java)

package src.thread;//测试生产者消费者问题2:信号灯法,标志位解决
public class TestPC2 {public static void main(String[] args) {TV tv = new TV();new Player(tv).start();new Watcher(tv).start();}
}//生产者-->演员
class Player extends Thread {TV tv;public Player(TV tv) {  //构造方法this.tv = tv;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {if (i % 2 == 0) {this.tv.play("快乐大本营播放中");} else {this.tv.play("抖音:记录美好生活");//广告}}}
}//消费者-->观众
class Watcher extends Thread {TV tv;public Watcher(TV tv) {  //构造方法this.tv = tv;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {tv.watch();}}
}//产品-->节目
class TV {//演员表演,观众等待  True//观众观看,演员等待   FalseString voice;//表演的节目boolean flag = true;//设置标志位,判断演员是否表演//表演public synchronized void play(String voice) {if (!flag) { //若观众观看的时候,演员需等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("演员表演了:" + voice);//通知观众观看this.notifyAll();//通知(唤醒)this.voice = voice;this.flag = !this.flag;}//观看public synchronized void watch() {if (flag) {  //若演员表演的时候。观众需等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("观众观看了:" + voice);//观众观看完通知演员表演this.notifyAll();this.flag = !this.flag;}
}

使用信号灯法,标志位解决测试生产者消费者问题(源码解析、建议收藏)相关推荐

  1. Koom 解决hprof文件过大-源码解析

    解决hprof文件过大 Hprof文件通常比较大,分析OOM时遇到500M以上的hprof文件并不稀奇,文件的大小,与dump成功率.dump速度.上传成功率负相关,且大文件额外浪费用户大量的磁盘空间 ...

  2. 部署测试fabric1.0及源码解析

    开发环境 UBUNTU 16.04 LTS docker docker-compose git go 1.8以上 docker,docker-compose以及go的安装这里不再描述. 部署测试 新建 ...

  3. 想为自己设置的软件加一个属于自己的图标吗?使用AWT_Swing_图标解决你的问题(源码解析)

    AWT_Swing_图标(Java) package Demo03;import javax.swing.*; import java.awt.*;//图标是一个接口,需要实现类,Frame继承 pu ...

  4. WebBench压力测试工具(详细源码注释+分析)

    WebBench压力测试工具(详细源码注释+分析) 本文适合人群:对WebBench实现感兴趣的人 WebBench原理: Linux下使用的服务器压力测试工具,利用fork建立多个子进程,每个子进程 ...

  5. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  6. 服务器存储满了进不去系统,解决PC常见问题 篇四十五:建议收藏!手贱升级进不去系统?两步简单恢复黑群晖!...

    解决PC常见问题 篇四十五:建议收藏!手贱升级进不去系统?两步简单恢复黑群晖! 2021-07-19 16:40:32 47点赞 302收藏 15评论 创作立场声明:本文属于原创文章,无任何利益关系, ...

  7. Spring 源码解析 - Bean创建过程 以及 解决循环依赖

    一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...

  8. JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码)

    JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码) setBit.js完整源代码 setBit.js完整源代码 /*** @param {number} number ...

  9. 人人都能看懂的Spring源码解析,Spring如何解决循环依赖

    人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...

最新文章

  1. 《强化学习周刊》第33期:UdeM | 基于不确定性估计的样本高效深度强化学习
  2. 5G 信令流程 — MM 定时器
  3. jvm十五:java虚拟机内存图
  4. DevExpress的分隔条控件SplitterControl的使用
  5. Pandas时间差(Timedelta)
  6. c语言堆栈基本代码入栈出栈_c语言的简单的进栈出栈
  7. UVA - 512 ​​​​​​​Spreadsheet Tracking
  8. 交换机抑制广播命令详解
  9. 使用WordPress创建个人博客的详细流程
  10. 如何用python写一个答题程序_python练习题库
  11. 世界地图html效果,html5 css3响应式世界地图代码
  12. hive 如何将数组转成字符串_HIve字符串函数
  13. marlin固件烧录教程_marlin固件中文(marlin固件下载)【配置教程】
  14. 2021-2027中国家具拉手市场现状及未来发展趋势
  15. Fast Walsh-Hadamard Transform (快速沃尔什变换)
  16. 逻辑回归原理与sklearn实现
  17. 睡眠是锁定计算机怎么设置密码,笔记本电脑如何设置睡眠唤醒密码?
  18. Google Pixel 刷机、OpenGApps和系统分区扩容
  19. 洛谷B2058 奥运奖牌计数
  20. 用C 绘制实时曲线图

热门文章

  1. Ubuntu安装报错E: Could not get lock /var/lib/dpkg/lock-frontend
  2. 使用JDK中的 keytool【创建证书】・【查看】・【使用】
  3. tcpdf中文解决方案
  4. spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
  5. Sublime Text 3 注册码失效(被移除)解决方法
  6. Docker容器的运行时性能成本是多少?
  7. 如何忽略有关本地更改的“ git pull”错误,因为合并会覆盖我的本地更改?
  8. 在React / React Native中使用构造函数与getInitialState有什么区别?
  9. 广东第一高中生_曝前广东第一高中生将加盟广东,他或成宏远最有希望之人
  10. android真机调试步骤