[设计模式]——生产者消费者模式_信号灯法
来源:互联网 发布:淘宝旧版本6.5.0下载 编辑:程序博客网 时间:2024/05/19 17:02
/** * 一个场景,共同的资源 * 生产者消费者模式信号灯法 * wait()等待,释放锁 sleep 不释放锁 * notify()/notifyAll():唤醒 * 与synchronized一起使用 * @author Administrator * */public class product_customer {private String pic;//信号灯 flag--->T 生产者生产,消费者等待,生产完成后通知消费// F 消费者消费,生产者等待,消费完成后通知生产private boolean flag=true;/** * 播放 */public synchronized void play(String pic){//生产者生产if (!flag) {try {this.wait();} catch (Exception e) {e.printStackTrace();}}//开始生产try {Thread.sleep(600);} catch (Exception e) {e.printStackTrace();}System.out.println("生产了 "+pic);//生产完毕this.pic=pic;//通知消费this.notify();//生产者停下this.flag=false;}public synchronized void watch(){//消费者等待if (flag) {try {this.wait();} catch (Exception e) {e.printStackTrace();}}//开始消费try {Thread.sleep(600);} catch (Exception e) {e.printStackTrace();}System.out.println(" -->消费了 "+pic);//消费完毕//通知生产this.notifyAll();//停止消费this.flag=true;}}
/** * 生产者 * @author Administrator * */public class Player implements Runnable{product_customer m;public Player(product_customer m) {super();this.m = m;}@Overridepublic void run() {for(int i=0;i<200;i++){if (0==i%2) {m.play("左青龙");}else {m.play("右白虎");}}}}
public class Watcher implements Runnable{private product_customer m;public Watcher(product_customer m) {super();this.m = m;}@Overridepublic void run() {for(int i=0;i<200;i++){m.watch();}}}
public class App {public static void main(String[] args) {//共同的资源product_customer m=new product_customer();//多线程Player p=new Player(m);Watcher w=new Watcher(m);new Thread(p).start();new Thread(w).start();}}
0 0
- [设计模式]——生产者消费者模式_信号灯法
- 线程_死锁_生产者消费者模式(信号灯法)_任务调度JAVA180-182
- 设计模式—生产者消费者模式
- 生产者消费者模式(信号灯法)和任务调度
- 生产者—消费者模式
- 多线程设计模式——Producer-Consumer生产者消费者模式
- 设计模式-生产者消费者模式
- 设计模式 - 生产者-消费者模式
- 设计模式--生产者消费者模式
- 设计模式-生产者消费者模式
- 生产者——消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 工作总结
- STL --- understand
- ionic 切换tabs 时出现的白屏问题
- unity 协程原理与线程的区别
- 欢迎使用CSDN-markdown编辑器
- [设计模式]——生产者消费者模式_信号灯法
- 第一天的碎碎念
- 获取scrollview中子view坐标
- 简单东西-面试经历总结
- c++第四次上机作业
- 登录注销
- 【JAVA实现】单例模式(singleton)
- c++第三次实验
- Array类型(数组项的添加和删除)