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.
总结:LinkedBlockingQueue achieved the best combined (adding and removing elements) performance results and should be your number one candidate for implementing producer – consumer schenarios.