博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产者消费者模式
阅读量:6689 次
发布时间:2019-06-25

本文共 2114 字,大约阅读时间需要 7 分钟。

hot3.png

信号灯模式实现
package com.lzs.utils;class Test1 {    public static void main(String[] args) {        Movie movie=new Movie();        Player player=new Player(movie);        Watcher watcher=new Watcher(movie);        Thread t1=new Thread(player);        Thread t2=new Thread(watcher);        t1.start();        t2.start();    }}class Player implements Runnable{    private Movie movie;    public Player(Movie movie){        this.movie=movie;    }    @Override    public void run() {        for (int i=0;i<20;i++){            if(0==i%2){                movie.play("疯狂动物城");            }else {                movie.play("呵呵");            }        }    }}class Watcher implements Runnable{    private Movie movie;    public Watcher(Movie movie){        this.movie=movie;    }    @Override    public void run() {        for (int i=0;i<20;i++){            movie.watch();        }    }}class Movie{    private String pic;    /*    *信号灯    *flag=true 生产者生产,消费者等待    *flag=true 生产者等待,消费者消费     */    private boolean flag=true;    public synchronized void play(String pic){        if(!flag){//product wait            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        //product start        try {            Thread.sleep(500);        } catch (InterruptedException e) {            e.printStackTrace();        }        //product finished        this.pic=pic;        //tell to consum        this.notify();        //product stop        this.flag=false;    }    public synchronized void watch() {        if(flag){//consumer wait            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        //consumer start        try {            Thread.sleep(500);        } catch (InterruptedException e) {            e.printStackTrace();        }        //consumer finished        System.out.println(pic);        //tell to product        this.notify();        //consume stop        this.flag=true;    }}
管道模式

转载于:https://my.oschina.net/firstBlooded/blog/643824

你可能感兴趣的文章
thinkphp中无法加载数据库驱动
查看>>
MyBatis的xml文件增量热加载,支持多数据源
查看>>
wine安装的软件如何卸载
查看>>
C语言中基本的数据类型 和常用表达式
查看>>
More Fileds的直接输出和获取自定义字段的方法
查看>>
12.1LNMP架构介绍12.2MySQL安装12.312.4 PHP安装12.5Nginx安装
查看>>
ubuntu下安装ROR
查看>>
static 关键字
查看>>
linux系统下zookeeper设置开机启动失败,求指教
查看>>
sed的用法
查看>>
工作流调度
查看>>
Nginx TCP代理和负载均衡
查看>>
理解原型对象
查看>>
Apache虚拟目录
查看>>
容器是实现操作系统虚拟化的一种途径
查看>>
电脑内部声音怎么录制 Mac在线录制音频
查看>>
个人对生活意义的观点
查看>>
Editplus的配置说明:Web服务器设置和用户工具栏设置
查看>>
手机拍照翻译如何把中文翻译为英文
查看>>
文件查找和压缩
查看>>