JUC学习之ArrayBlockingQueue
2014-05-28 11:05
288 查看
package queue; import java.util.concurrent.ArrayBlockingQueue; public class ArrayBlockingQueueUse { /** * @Title: ArrayBlockingQueue 实现生成者消费者队列 * @Description: 尽量使用本身的put和take方法,保持Blocing特性,如果需要用继承的poll和offer建议带超时时间的方法 * @param @param args 设定文件 * @return void 返回类型 * @throws */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(100); AQueueProductor productor = new AQueueProductor(queue); productor.setName("AQueueProductor"); productor.start(); //---------------- AQueueConsumer consumer1 = new AQueueConsumer(queue); consumer1.setName("consumer1"); AQueueConsumer consumer2 = new AQueueConsumer(queue); consumer2.setName("consumer2"); consumer1.start(); consumer2.start(); } } /** * 消费者 * */ class AQueueConsumer extends Thread{ private ArrayBlockingQueue<Integer> queue; public AQueueConsumer(ArrayBlockingQueue<Integer> queue){ this.queue = queue; } public void run(){ while(true){ try { Integer message = queue.take(); System.out.println("======== "+this.getName()+" 获取到消息:"+message+" ========"); Thread.currentThread().sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e.getMessage(),e); } } } } /** * 生产者 * */ class AQueueProductor extends Thread{ private ArrayBlockingQueue<Integer> queue; public AQueueProductor(ArrayBlockingQueue<Integer> queue){ this.queue = queue; } public void run(){ int i=0; while(true){ i++; Integer message = new Integer(i); try { queue.put(message); if(i%20==0){ //--休息一会 System.out.println("============"+this.getName()+" 累计生产Message数量:"+i+" ============"); Thread.currentThread().sleep(5000); } } catch (InterruptedException e) { throw new RuntimeException(e.getMessage(),e); } } } }
相关文章推荐
- Java并发学习笔记(七)-ArrayBlockingQueue
- java 队列阻塞方法ArrayBlockingQueue学习
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
- JUC队列-ArrayBlockingQueue(一)
- ArrayBlockingQueue学习笔记
- java并发编程(二十四)----(JUC集合)ArrayBlockingQueue和LinkedBlockingQueue介绍
- Java并发学习(二十二)-ArrayBlockingQueue分析
- Java并发编程札记-(五)JUC容器-05ArrayBlockingQueue与LinkedBlockingQueue
- ArrayBlockingQueue 源码学习
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
- Thread学习(九) 并发的Queen学习ArrayBlockingQueue,LinkedBlockingQueue
- Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue
- juc中ArrayBlockingQueue为什么出入用同一个锁?
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
- 【JUC】JDK1.8源码分析之ArrayBlockingQueue(三)
- Java多线程 -- JUC包源码分析5 -- Condition/ArrayBlockingQueue/LinkedBlockingQueue/Deque/PriorityBlockingQueue
- JUC回顾之-ArrayBlockingQueue底层实现和原理
- Java多线程系列--【JUC集合07】- ArrayBlockingQueue
- Java集合类(十九)JUC中的集合--ArrayBlockingQueue
- JUC集合-07之 ArrayBlockingQueue