LinkedBlockingQueue和ConcurrentLinkedQueue
2016-03-10 16:05
555 查看
LinkedBlockingQueue ConcurrentLinkedQueue
都是先进先出的线程同步的队列
区别:
The most important difference between LinkedBlockingQueue and ConcurrentLinkedQueue is that if you request an element from a LinkedBlockingQueue and the queue is empty, your thread will wait until there is something there. A ConcurrentLinkedQueue will return right away with the behavior of an empty queue.
队列为空时执行_segments.take()
LinkedBlockingQueue会阻塞,直到有元素进来;
ConcurrentLinkedQueue立即返回空
适用性:
LinkedBlockingQueue 发送消息队列(有消息就发送,无消息阻塞)
ConcurrentLinkedQueue 读取消息队列(无消息break)
ArrayBlockingQueue vs ConcurrentLinkedQueue vs LinkedBlockingQueue vs LinkedList
多线程添加数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程获取数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程遍历数据
Both ArrayBlockingQueue and LinkedBlockingQueue implementation classes performed poorly compared to the ConcurrentLinkedQueue and LinkedList implementation classes.
多线程添加和获取数据
ArrayBlockingQueue and LinkedBlockingQueue outperformed both LinkedList and ConcurrentLinkedQueue . BlockingQueue implementations are designed to be used primarily for producer–consumer queues.
总结:LinkedBlockingQueue achieved the best combined (adding and removing elements) performance results and should be your number one candidate for implementing producer – consumer schenarios.
都是先进先出的线程同步的队列
区别:
The most important difference between LinkedBlockingQueue and ConcurrentLinkedQueue is that if you request an element from a LinkedBlockingQueue and the queue is empty, your thread will wait until there is something there. A ConcurrentLinkedQueue will return right away with the behavior of an empty queue.
队列为空时执行_segments.take()
LinkedBlockingQueue会阻塞,直到有元素进来;
ConcurrentLinkedQueue立即返回空
适用性:
LinkedBlockingQueue 发送消息队列(有消息就发送,无消息阻塞)
ConcurrentLinkedQueue 读取消息队列(无消息break)
ArrayBlockingQueue vs ConcurrentLinkedQueue vs LinkedBlockingQueue vs LinkedList
多线程添加数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程获取数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程遍历数据
Both ArrayBlockingQueue and LinkedBlockingQueue implementation classes performed poorly compared to the ConcurrentLinkedQueue and LinkedList implementation classes.
多线程添加和获取数据
ArrayBlockingQueue and LinkedBlockingQueue outperformed both LinkedList and ConcurrentLinkedQueue . BlockingQueue implementations are designed to be used primarily for producer–consumer queues.
总结:LinkedBlockingQueue achieved the best combined (adding and removing elements) performance results and should be your number one candidate for implementing producer – consumer schenarios.
相关文章推荐
- lucene4.7 正则查询(RegexpQuery)(八)
- Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException:
- 数据库参考,键值(Key-value)数据库,列式存储,文档型数据库,图型数据库
- Storm UI
- 使用SoapUI 测试Web Service
- activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含
- 错误The request sent by the client was syntactically incorrect ()的解决
- java Queue
- 蓝牙基础知识进阶——物理链路和逻辑传输
- Unique唯一值的前提是字段中不重复且空白值设为NULL
- UGUI如果只做特定次数的滑动界面
- GUI for git|SourceTree|入门基础
- urllib2的build_opener()函数使用
- tableview 方法说明
- iOS-UIAlertController简易封装
- 探究java中的String、StringBuilder以及StringBuffer
- std::queue用法
- UIScrollViewDelegate 详解
- UIDevicePlatform 设备
- UI_Target/action 设计模式