您的位置:首页 > 产品设计 > UI/UE

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.

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: