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

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

一、创建个生产者类

package consumerAndProducer;/** * @author tanhw119214 * @version JDK1.8.0_171 * @date on  2018/8/2 16:57 */public class Producer implements Runnable{    private DataStore m_data;    public Producer(DataStore d) {        m_data = d;    }    public void run() {        System.out.print("producer thread run\n");        int	 inPutData = 0;        while (true) {            m_data.producerData(inPutData++);        }    }}

二、创建个消费者类

package consumerAndProducer;/** * @author tanhw119214 * @version JDK1.8.0_171 * @date on  2018/8/2 16:56 */public class Consumer implements Runnable{    private DataStore m_data;    public Consumer(DataStore d) {        m_data = d;    }    public void run() {        System.out.print("consumer thread run\n");        while (true) {            m_data.consumerData();        }    }}

三、创建个生产消费的类

package consumerAndProducer;/** * @author tanhw119214 * @version JDK1.8.0_171 * @date on  2018/8/2 16:49 */public class DataStore {        private int m_iData = 0;        private boolean m_bSetData = true;    /**     * 生产     * @param iInputData     */    public synchronized void producerData(int iInputData) {// 添加synchronized保证线程同步功能            if (m_bSetData) {                try {                    this.wait(); //等待消费者消费                } catch (InterruptedException e) {                    System.out.print("InterrupExcepthion put data\n");                }            }            System.out.print("producer: " + iInputData);            m_iData = iInputData;            m_bSetData = true;            this.notify(); //继续生产        }    /**     * 消费     */    public synchronized void consumerData() {            if (!m_bSetData) {                try {                    this.wait(); //等待生产者产生数据,停止消费                } catch (InterruptedException e) {                    System.out.print("InterrupExcepthion get data\n");                }            }            System.out.print("   consumer: " + m_iData + "\n");            m_bSetData = false;            this.notify(); //唤醒消费者线程,继续消费。        }}

四、创建一个Test运行类

package consumerAndProducer;/** * @author tanhw119214 * @version JDK1.8.0_171 * @date on  2018/8/2 17:00 */public class Cmain {    public static void main(String[] args) {        DataStore dataStore = new DataStore();        Consumer consumer = new Consumer(dataStore);        Thread consumerThread = new Thread(consumer);        consumerThread.start();        Producer producer = new Producer(dataStore);        Thread producerThread = new Thread(producer);        producerThread.start();    }}

 

转载地址:http://dugai.baihongyu.com/

你可能感兴趣的文章
奉劝那些想把编程学好的人
查看>>
如果诸葛亮用C++写出师表。。。。
查看>>
线上jar包里,竟然藏有小电影
查看>>
火爆国外的Python教程,终于迎来了汉化版!
查看>>
VS Code 真的会一统江湖吗?
查看>>
百度网盘这个版本绝了,简洁无广告,速度还快
查看>>
Linux之父警告全球程序员:我刚发布的5.12内核有bug,你们千万别用
查看>>
IDEA公司真牛逼,发行最适合程序员编程字体~
查看>>
闲鱼 12 块买的软件资源!禁止贩卖赚钱
查看>>
刷LeetCode算法题的常见模式套路
查看>>
GitHub 标星8.6K:将任何设备转换为电脑的辅助屏幕
查看>>
955 互联网公司白名单来了!这些公司月薪20k,没有996!福利榜国内大厂只有这家!...
查看>>
这种古法制作CPU,看第一眼就被震撼到了
查看>>
注意!某知名国产软件被曝携带木马病毒
查看>>
为什么我建议你一定要学Python?
查看>>
哈哈哈哈哈哈…发现微信一个bug!有点好玩~
查看>>
B 站,真香 ! ! !
查看>>
我是如何放弃 JSP,转向 REST 编程的
查看>>
阿里二面:什么是mmap?
查看>>
收到字节 Offer,月薪 45k,爽!
查看>>