
多线程设置flag标志位实现同步
发布日期:2021-05-09 04:31:33
浏览次数:11
分类:博客文章
本文共 1677 字,大约阅读时间需要 5 分钟。
信号灯解决同步问题
我尽量注释了代码,可以很容易理解了。
package Thread;/** * 信号灯 * 借助标志位 */public class FlagThread { public static void main(String[] args) { Bread bread=new Bread(); new Producer(bread).start(); new Consume(bread).start(); }}class Consume extends Thread{ Bread bread; public Consume(Bread bread) { super(); this.bread = bread; } @Override public void run() { for(int i=1;i<100;++i) { bread.consume(); } }}class Producer extends Thread{ Bread bread; public Producer(Bread bread) { super(); this.bread = bread; } @Override public void run() { for(int i=1;i<100;++i) { bread.produce(); } }}//资源//同步方法要放在资源里,没有交点不会相互唤醒class Bread{ //为T表示面包在生产,为F表示可以消费了 boolean flag;//标志位,定义在需要被操控的类里面 public Bread() {//构造方法初始化flag=true flag=true; } public synchronized void produce(){//同步方法用来操控生产 if(!this.flag) {//如果标志位为false,生产者等待 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }//如果标志位为true,那就生产,生产之后吧flag设置为false System.out.println(Thread.currentThread ().getName ()+"正在生产······");//这是这句话的临界资源 this.flag=!this.flag; this.notifyAll(); } public synchronized void consume(){ if(this.flag) {//如果flag为真,说明没有面包,需要等待 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }//否则等待 System.out.println(Thread.currentThread ().getName ()+"正在消费·····"); this.flag=!this.flag; this.notifyAll(); }}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月01日 14时23分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
100天搞定机器学习|Day9-12 支持向量机
2021-05-09
100天搞定机器学习|Day19-20 加州理工学院公开课:机器学习与数据挖掘
2021-05-09
100天搞定机器学习|Day22 机器为什么能学习?
2021-05-09
100天搞定机器学习|day37 无公式理解反向传播算法之精髓
2021-05-09
100天搞定机器学习|day38 反向传播算法推导
2021-05-09
《统计学习方法》极简笔记P2:感知机数学推导
2021-05-09
数据工程师必备的8项技能,不要只知道Python!
2021-05-09
R in action读书笔记(3)-第六章:基本图形
2021-05-09
R in action读书笔记(19)第十四章 主成分和因子分析
2021-05-09
CISC和RISC是什么?它们的特点和区别?
2021-05-09
选择排序 C++实现
2021-05-09
自定义UITableView各种函数
2021-05-09
iOS UIAlertController
2021-05-09
iOS UISlider的使用
2021-05-09
iOS Xcode 打包之后,不能输出日志
2021-05-09
UIPickerView的使用(二)
2021-05-09
iOS 多线程GCD简介
2021-05-09
不想eject,还咋修改create-react-app的配置?
2021-05-09
实现延迟消息队列
2021-05-09
写了一下 micropython 的文件系统单元测试
2021-05-09