生产者消费者模式代码java_生产者消费者模式

4e6f9a31b3c988328c4a0a689e959c0b.png

单生产者单消费者模式

生产者消费者模型是一个经典的问题,其主要有3部分构成:生产者、阻塞队列和消费者。如下图所示:

a57389169c1b9a6fbda8cff8ad05f1b0.png

单生产者单消费者模式

生产者消费者模式,可以在一定程度上面做到程序之间的模块解耦。但是还有一个主要的特性,就是它可以通过阻塞队列来协调生产者和消费者的处理速率不同的问题。下面给出一个简单的Demo:

PCData:用于传输的数据

public final class PCData {private final int intData;public PCData(int intData) {this.intData = intData;}public PCData(String intData) {this.intData = Integer.parseInt(intData);}public int getIntData() {return intData;}@Overridepublic String toString() {return "PCData [intData=" + intData + "]";}}

Producer:生产者

public class Producer implements Runnable {private volatile boolean isRunning = true;private BlockingQueue queue;//内存缓冲区private static AtomicInteger count = new AtomicInteger();// 总数private static final int SLEEPTIME = 1000;public Producer(BlockingQueue queue) {this.queue = queue;}@Overridepublic void run() {PCData data = null;System.out.println("start producer id = " + Thread.currentThread().getId());try {while(isRunning) {Thread.sleep(SLEEPTIME);data = new PCData(count.getAndIncrement());// 构造任务数据System.out.println(data + " is put into queue");if(!queue.offer(data, 2, TimeUnit.SECONDS)) {// 提交任务到缓冲区System.err.println("failed to offer data: "+ data);}}} catch (Exception e) {e.printStackTrace();Thread.currentThread().interrupt();}}public void stop(){this.isRunning = false;}}

Customer:消费者

public class Customer implements Runnable {private BlockingQueue queue; // 内存缓冲区private static final int SLEEPTIME = 1000;public Customer(BlockingQueue queue) {this.queue = queue;}@Overridepublic void run() {System.out.println("start Consumer id = " + Thread.currentThread().getId());Random r = new Random();try {while (true) {PCData data = queue.take();// 提取任务if (null != data) {int re = data.getIntData() * data.getIntData();System.out.println(MessageFormat.format("{0}*{1}={2}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值