面试题:LinkedTransferQueue和SynchronousQueue有什么区别

SynchronousQueue VS LinkedTransferQueue

SynchronousQueue 是一个队列长度为 0 的 BlockingQueue,所以没有一个地方来暂存元素,导致每次取数据都要先阻塞,直到有数据被放入;同理,每次放数据的时候也会阻塞,直到有消费者来取。它所做的就是直接传递(direct handoff)。由于每当需要传递的时候,SynchronousQueue 会把元素直接从生产者传给消费者,在此期间并不需要做存储,所以如果运用得当,它的效率是很高的。

LinkedTransferQueue 是一种效率更高的公平队列,TransferQueue在BlockingQueue提供的方法基础上,增加了 transfer 方法,就是只有生产者的消息被消费之后,才返回,否则继续阻塞。主要是:通过 CAS 更新引用,避免使用锁,数据缓存行填充减少false sharing,优化双向同步队列数据结构,减少更新冲突

posted @ 2021-01-15 13:25  天宇轩-王  阅读(267)  评论(0编辑  收藏  举报