我在java中读到了并发队列,并且收到了关于LinkedTransferQueue的混淆。什么是LinkedTransferQueue类型(它是阻塞队列还是非阻塞队列)?我读过LinkedTransferQueue使用CAS (比较和交换)方法和park (比较和交换)方法不安全,并且由节点和指针(如ConcurrentLinkedQueue )组成,它推动了这样的想法,即它是一个非阻塞队列。但是接口TransferQueue扩展了TransferQueue看起来模棱两可。最后,LinkedTransferQueue阻塞还是不阻塞队列?
发布于 2016-08-03 20:49:04
LinkedTransferQueue是一个无界队列,所以尽管它是BlockingQueue,但它永远不会真正达到普通BlockingQueue实现可能实现的公共生产者/消费者模式。
那么,它是阻塞还是不阻塞?这实际上取决于手术。例如,下面列出了几个。
非阻塞操作:
offerputaddpolltryTransfer封锁行动:
taketransfer关键是,如果一个操作可以实现而不阻塞它就会实现。由于LinkedTransferQueue必须是无界的,所以它可以同时执行阻塞操作和非阻塞操作。
如果感兴趣,我通过查看Java 8实现发现了这一点。
发布于 2016-09-06 09:57:54
来自Javadoc
一种基于链接节点的可选有界阻塞队列。
https://stackoverflow.com/questions/38748576
复制相似问题