Java阻塞队列BlockingQueue的使用
来源:互联网 发布:消防工程师网络培训班 编辑:程序博客网 时间:2024/05/20 07:15
使用阻塞队列BlockingQueue实现模拟生产消费关系:
import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;/** * 生产消费问题 * @author 周孟军时间:2016年8月2日 下午12:51:40 * */public class BlockingQueueDemo {/** * 定义装苹果的篮子 */class Basket {// 篮子 能够容纳3个苹果BlockingQueue<String> basket = new LinkedBlockingQueue<String>(3);// 生产苹果 -->放入篮子public void produce() throws InterruptedException {basket.put("1 apple");}// 消费苹果--->从篮子中取出public String consume() throws InterruptedException {// take方法 取出一个苹果 如果 bakset 为空 等到 有苹果为止 (获取并以处队列的头部)return basket.take();}}// 定义苹果的生产者 线程接口class Producer implements Runnable {private String instance;private Basket basket;public Producer(String instance, Basket basket) {super();this.instance = instance;this.basket = basket;}@Overridepublic void run() {try {while (true) {System.out.println("生产者准备生产苹果" + instance);basket.produce();System.out.println("生产者生产苹果完毕" + instance);// 休眠300MSThread.sleep(300);}} catch (InterruptedException e) {System.out.println("Producer InterruptedException");}}}class Consumer implements Runnable {private String instance;private Basket basket;public Consumer(String instance, Basket basket) {super();this.instance = instance;this.basket = basket;}@Overridepublic void run() {try {while (true) {// 消费苹果System.out.println("消费者注备消费苹果:" + instance);System.out.println(basket.consume());System.out.println("消费者消费苹果完毕" + instance);Thread.sleep(300);}} catch (Exception e) {System.out.println("Consumer InterruptedException");}}}public static void main(String[] args) {// 创建最外面的类BlockingQueueDemo test = new BlockingQueueDemo();// 篮子Basket basket = test.new Basket();// 生产者Producer producer1 = test.new Producer("生产者1", basket);Producer producer2 = test.new Producer("生产者2", basket);Consumer consumer = test.new Consumer("消费者1", basket);// 创建线程池ExecutorService service = Executors.newCachedThreadPool();service.submit(producer1);service.submit(producer2);service.submit(consumer);// 程序运行5秒后停止 所有任务try {Thread.sleep(5000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 结束所有 线程service.shutdownNow();}}
0 0
- Java阻塞队列BlockingQueue的使用
- java的阻塞队列blockingqueue
- Java中 BlockingQueue(阻塞队列)的使用
- 阻塞队列BlockingQueue使用
- Java 阻塞队列 BlockingQueue
- java 阻塞队列BlockingQueue
- Java : BlockingQueue 阻塞队列
- JAVA阻塞队列BlockingQueue
- java阻塞队列BlockingQueue使用实例
- java中阻塞队列BlockingQueue的用法
- Java多线程-阻塞队列BlockingQueue
- Java线程:阻塞队列BlockingQueue
- BlockingQueue 阻塞队列 -- Java 多线程
- java中的阻塞队列BlockingQueue
- java多线程-BlockingQueue(阻塞队列)
- Java多线程-BlockingQueue(阻塞队列)
- java中的阻塞队列BlockingQueue
- Java阻塞队列之BlockingQueue
- 【Redis】配置文件参数说明详解
- spark-shell无法退格或者删除
- 实现samba可写不可删除
- 移动设备 - 测试1秒能摇多少次
- Centos 7 下命令整理
- Java阻塞队列BlockingQueue的使用
- Linux命令学习:shutdown
- MongoDB 启动文件设置
- Python中Super的使用
- OpenCV仪表数据识别(三):数据按行分割
- 使用超图SuperMap制作气象类专题图全攻略(一)
- [摘录]How browsers work之页面渲染流程
- 欢迎使用CSDN-markdown编辑器
- 2013 蟠桃记