对于BlockingQueue/LinkedBlockingQueue与jsr166y和Java 7中的新TransferQueue/LinkedTransferQueue类型之间的区别,我有些困惑
最佳答案
从TransferQueue JavaDocs:
换句话说,当您使用BlockingQueue时,您只能将元素放入队列(如果队列已满,则将其阻塞)。使用TransferQueue,您也可以阻塞,直到其他线程收到您的元素为止(您必须为此使用新的transfer
方法)。这是区别。使用BlockingQueue,您不能等到其他线程删除您的元素(仅当您使用SynchronousQueue时,但这实际上不是队列)。
除此之外,TransferQueue还是BlockingQueue。在TransferQueue中检查新的可用方法:http://download.oracle.com/javase/7/docs/api/java/util/concurrent/TransferQueue.html(transfer,tryTransfer,hasWaitingConsumer,getWaitingConsumerCount)。
Collections Framework Enhancements in Java SE 7明确表示:
关于java - BlockingQueue和TransferQueue之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7317579/