LinkedBlockingQueue和ConcurrentLinkedQueue

来源:互联网 发布:dash for mac 破解版 编辑:程序博客网 时间:2024/06/05 21:58

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.

 

 

 

0 0
原创粉丝点击