java并发包学习系列:生产者消费者模式
来源:互联网 发布:淘宝宝贝发货地址设置 编辑:程序博客网 时间:2024/05/22 17:29
生产者消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案。在生产者消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程足额提交用户请求,消费者线程负责具体处理生产者提交的任务。生产者和消费者之间则通过共享内存缓冲区进行通信。
如图:
例子:
生产者
import java.util.concurrent.BlockingQueue;class Producer implements Runnable { private String name; BlockingQueue<Product> s; public Producer(String name, BlockingQueue<Product> s) { this.name = name; this.s = s; } public void run() { try { while (true) { Product product = new Product((int) (Math.random() * 10000)); // 产生0~9999随机整数 System.out.println(name + "准备生产(" + product.toString() + ")."); s.put(product); System.out.println(name + "已生产(" + product.toString() + ")."); System.out.println("==============="); Thread.sleep(500); } } catch (InterruptedException e1) { e1.printStackTrace(); } }}
消费者
/** * Created by niehongtao on 16/7/14. */import java.util.concurrent.BlockingQueue;class Consumer implements Runnable { private String name; BlockingQueue<Product> s; public Consumer(String name, BlockingQueue<Product> s) { this.name = name; this.s = s; } public void run() { try { while (true) { System.out.println(name + "准备消费产品."); Product product = s.take(); System.out.println(name + "已消费(" + product.toString() + ")."); System.out.println("==============="); Thread.sleep(500); } } catch (InterruptedException e) { e.printStackTrace(); } }}
共享数据类型
/** * Created by niehongtao on 16/7/14. */public class Product { private int id; public Product(int id) { this.id = id; } public String toString() {// 重写toString方法 return "产品:" + this.id; }}
客户端
/** * Created by niehongtao on 16/7/14. */public class ProducerConsumer { public static void main(String[] args) { BlockingQueue<Product> queues = new LinkedBlockingQueue<Product>(10); ExecutorService service = Executors.newCachedThreadPool(); Producer p = new Producer("张三", queues); Producer p2 = new Producer("李四", queues); Consumer c = new Consumer("王五", queues); Consumer c2 = new Consumer("老刘", queues); Consumer c3 = new Consumer("老林", queues); service.submit(p); service.submit(p2); service.submit(c); service.submit(c2); service.submit(c3); }}
0 0
- java并发包学习系列:生产者消费者模式
- java并发包:生产者消费者模式
- Java并发学习--生产者/消费者模式
- Java并发编程系列之十三:生产者-消费者模式
- Java并发编程 生产者消费者模式
- Java并发编程:生产者-消费者模式
- Java并发编程:生产者消费者模式
- java基础系列之生产者消费者模式
- java 多线程并发系列之 生产者消费者模式的两种实现
- java 多线程并发系列之 生产者消费者模式的两种实现
- 基于并发包同步机制实现生产者-消费者模式
- 《Java高并发程序设计》学习 --5.3 并行模式之生产者-消费者模式
- java并发包学习系列:future模式
- java并发包学习系列:future模式
- Java 线程与并发研究系列五(生产者与消费者)
- Java并发编程深入学习——生产者-消费者模式多种实现方式
- Java生产者消费者模式
- 生产者消费者模式---java
- 单例模式之静态内部类
- 【poj3764】 The xor-longest Path
- java并发包学习系列:jdk并发容器
- java并发包学习系列:future模式
- 不同的函数定义方式,new出不同的结果
- java并发包学习系列:生产者消费者模式
- 页面加载出错,rendering: Could not find layout resource和PorterDuff Color Filters are not supported
- 要做的事...
- 2016.07.12【初中部 NOIP提高组 】模拟赛C
- [Leetcode]223. Rectangle Area
- 判断服务器资源使用是否合理
- Java之BufferedInputStream详解 源码分析学习笔记
- 使用Java实现的简易“生产者消费者问题”
- nsenter工具进入docker容器