java的各个队列之间的联系和区别是什么
2015-02-06 15:45
537 查看
java的各个并发队列之间的联系和区别
java.util.concurrent是在并发编程中很常用的实用工具类
ArrayBlockingQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue下面是代码例子
/** * */ package concurrent; import java.util.Random; import java.util.concurrent.BlockingQueue; /** * @author think * */ class Producer implements Runnable { private final BlockingQueue<Integer> queue; Producer(BlockingQueue<Integer> q) { queue = q; } public void run() { try { while (true) { queue.put(produce()); } } catch (InterruptedException ex) { System.out.println(ex); } } Integer produce() { Random random = new Random(); return random.nextInt(); } }
/** * */ package concurrent; import java.util.concurrent.BlockingQueue; /** * @author think * */ class Consumer implements Runnable { private final BlockingQueue<Integer> queue; Consumer(BlockingQueue<Integer> q) { queue = q; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException ex) { System.out.println(ex); } } void consume(Integer x) { System.out.println(x); } }
/** * */ package concurrent; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * @author think * */ class Setup { public static void main(String[] args) { BlockingQueue<Integer> q = new ArrayBlockingQueue<Integer>(100); Producer p = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } }
ArrayBlockingQueue 一个由数组支持的有界阻塞队列
DelayQueue Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素
LinkedBlockingDeque 一个基于已链接节点的、任选范围的阻塞双端队列。
LinkedBlockingQueue 一个基于已链接节点的、范围任意的 blocking queue。
PriorityBlockingQueue 一个无界阻塞队列,它使用与类 PriorityQueue
相同的顺序规则,并且提供了阻塞获取操作。
SynchronousQueue 一种阻塞队列,其中每个插入操作必须等待另一个线程的对应移除操作 ,反之亦然。
Java线程:新特征-阻塞栈LinkedBlockingDeque
http://lavasoft.blog.51cto.com/62575/222530/http://www.cnblogs.com/jackyuj/archive/2010/11/24/1886553.html
PriorityBlockingQueue
/article/3918018.htmlhttp://blog.csdn.net/xin_jmail/article/details/26157971 http://zzhonghe.iteye.com/blog/826757
相关文章推荐
- 第1章 Java基本概念及环境配置——FAQ1.10 JDK. JRE和JVM之间有什么区别?
- Java语言中的静态变量和非静态变量之间有什么区别?
- Java中Hashset、HashMap、ArrayList、LinkedList、Vector之间的联系与区别
- <Java中的继承和组合之间的联系和区别>
- Java五个最常用的集合类之间的区别和联系
- UART,串口,RS232,RS485等等,之间有什么联系和区别?
- java容器之HashTable和HashMap之间的区别和联系
- Java系列之JDBC和ODBC之间的区别与联系
- Java中String和String Buffer两种字符串类型之间的区别和联系
- OA、CRM、ERP之间的区别和联系是什么?
- 三个实体型之间的多对多联系和两两之间的三个多对多联系有什么区别
- Java中Hashset、HashMap、ArrayList、LinkedList、Vector之间的联系与区别
- Java基础知识――SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
- OA、CRM、ERP之间的区别和联系是什么?
- sqlserver版本分类下载以及各个版本之间的区别是什么
- Java五个最常用的集合类之间的区别和联系
- Java中Hashset、HashMap、ArrayList、LinkedList、Vector之间的联系与区别
- Java基础知识——SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
- javac.exe、 java.exe、 java虚拟机三者之间的区别与联系
- [转]Java五个最常用的集合类之间的区别和联系