我在java中读到了并发队列,我对LinkedTransferQueue感到困惑。什么是LinkedTransferQueue的类型(是阻塞还是非阻塞队列)?我已经读过LinkedTransferQueue使用来自Unsafe的CAS(比较和交换)方法和park方法,并且由ConcurrentLinkedQueue之类的节点和指针组成,它推断它是一个非阻塞队列。但是接口TransferQueue扩展了 BlockingQueue 。它看起来很模糊。最后,LinkedTransferQueue是阻塞还是非阻塞队列?
答案 0 :(得分:2)
LinkedTransferQueue
是一个无界的队列,所以尽管它是BlockingQueue
,但它实际上永远不会达到正常的生成器/消费者模式,正常的BlockingQueue实现可能会实现。
那么,它是否阻止?它实际上取决于操作。例如,下面列出了一些。
非阻止操作:
offer
put
add
poll
tryTransfer
阻止操作:
take
transfer
重点是,如果一个操作可以实现而不会阻塞它。由于LinkedTransferQueue被强制无限制,因此它可以通过阻塞和非阻塞操作来解决。
如果有兴趣,我通过Java 8实现找到了这个。
答案 1 :(得分:-1)
来自Javadoc:
基于链接节点的可选绑定阻塞队列。