博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java多线程】生产者消费者之ArrayBlockingQueue实现
阅读量:7062 次
发布时间:2019-06-28

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

hot3.png

package com.thread.blockingqueue.test2;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class ProducerConsumerService {    public static void main(String[] args) {        //创建大小为10的 BlockingQueue         BlockingQueue
 queue = new ArrayBlockingQueue<>(10);        Producer producer = new Producer(queue); //这里Thread.sleep(500);的休眠时间大于Consumer的时间        Consumer consumer = new Consumer(queue);        //开启 producer线程向队列中生产消息        new Thread(producer).start();        //开启 consumer线程 中队列中消费消息        new Thread(consumer).start();        System.out.println("Producer and Consumer has been started");    } }

package com.thread.blockingqueue.test2;import java.util.concurrent.BlockingQueue;public class Producer implements Runnable {     private BlockingQueue
 queue;         public Producer(BlockingQueue
 q){        this.queue=q;    }    @Override    public void run() {        //生产消息        for(int i=0; i<50; i++){            Message msg = new Message(""+i);            try {                Thread.sleep(500);                queue.put(msg);                System.out.println("Produced "+msg.getMsg());            } catch (InterruptedException e) {                e.printStackTrace();            }        }        //添加退出消息        Message msg = new Message("exit");        try {            queue.put(msg);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

package com.thread.blockingqueue.test2;import java.util.concurrent.BlockingQueue;public class Consumer implements Runnable {	private BlockingQueue
 queue; public Consumer(BlockingQueue
 q) { this.queue = q; } @Override public void run() { try { Message msg; // 获取并处理消息直到接收到“exit”消息    while ((msg = queue.take()).getMsg() != "exit") { Thread.sleep(10); System.out.println("Consumed " + msg.getMsg()); } } catch (InterruptedException e) { e.printStackTrace(); } }}

package com.thread.blockingqueue.test2;public class Message {    private String msg;         public Message(String str){        this.msg=str;    }     public String getMsg() {        return msg;    } }

转载于:https://my.oschina.net/u/141132/blog/340092

你可能感兴趣的文章
超可爱的颜文字,我要放到代码里❛‿˂̵✧
查看>>
Laravel核心解读--观察者模式
查看>>
细数iOS上的那些安全防护
查看>>
H5打造属于自己的视频播放器(HTML篇)
查看>>
关于人工智能,你所需了解的基本知识
查看>>
2019,聊聊Web技术的发展
查看>>
centos7使用kubeadm配置高可用k8s集群的另一种方式
查看>>
深入探索 Kdump
查看>>
three.js 坐标系、camera位置属性、点、线、面
查看>>
kubernetes1.9安装dashboard,以及token认证问题
查看>>
linux tcpdump
查看>>
ASP.NET (Web) + C#算法 | 生成随机数字序列(随机数字+每个数字取随机不重复的位置和颜色)...
查看>>
理解神经网络:从神经元到RNN、CNN、深度学习
查看>>
我国第一部太赫兹视频合成孔径雷达成功研制
查看>>
外卖新零售品牌佐大狮完成数千万元天使轮融资,高榕资本领投
查看>>
GrooveX研发情感治愈机器人lovot,可与人类完成亲密互动
查看>>
使用kubeadm安装k8s-1.11版本
查看>>
美联邦调查局 FBI 网站被黑,数千特工信息泄露
查看>>
超燃!Apache Flink 全球顶级盛会强势来袭
查看>>
约你一起来写作
查看>>