[设计模式]——生产者消费者模式_信号灯法

来源:互联网 发布:淘宝旧版本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
原创粉丝点击