LinkedTransferQueue是阻塞还是非阻塞队列?

时间:2016-08-03 16:03:14

标签: java multithreading data-structures queue

我在java中读到了并发队列,我对LinkedTransferQueue感到困惑。什么是LinkedTransferQueue的类型(是阻塞还是非阻塞队列)?我已经读过LinkedTransferQueue使用来自Unsafe的CAS(比较和交换)方法和park方法,并且由ConcurrentLinkedQueue之类的节点和指针组成,它推断它是一个非阻塞队列。但是接口TransferQueue扩展了 BlockingQueue 。它看起来很模糊。最后,LinkedTransferQueue是阻塞还是非阻塞队列?

2 个答案:

答案 0 :(得分:2)

LinkedTransferQueue是一个无界的队列,所以尽管它是BlockingQueue,但它实际上永远不会达到正常的生成器/消费者模式,正常的BlockingQueue实现可能会实现。

那么,它是否阻止?它实际上取决于操作。例如,下面列出了一些。

非阻止操作:

  • offer
  • put
  • add
  • poll
  • tryTransfer

阻止操作:

  • take
  • transfer

重点是,如果一个操作可以实现而不会阻塞它。由于LinkedTransferQueue被强制无限制,因此它可以通过阻塞和非阻塞操作来解决。

如果有兴趣,我通过Java 8实现找到了这个。

答案 1 :(得分:-1)

来自Javadoc

  

基于链接节点的可选绑定阻塞队列。