我对 BlockingQueue/LinkedBlockingQueue 与 jsr166y 和 java 7 中的新 TransferQueue/LinkedTransferQueue 类型之间的区别有点困惑
From TransferQueue Java文档 http://download.oracle.com/javase/7/docs/api/java/util/concurrent/TransferQueue.html:
一个 BlockingQueue,生产者可以在其中等待消费者接收元素。 TransferQueue 在消息传递应用程序中可能很有用,其中生产者有时(使用方法 transfer(E))等待消费者调用 take 或 poll 接收元素,而有时将元素排入队列(通过方法 put)而不等待接收。
换句话说,当你使用BlockingQueue时,你只能将元素放入队列(如果队列已满则阻塞)。使用 TransferQueue,您还可以阻塞直到其他线程接收到您的元素(您必须使用 newtransfer
方法)。这就是区别。使用 BlockingQueue,您不能等到其他线程删除您的元素(仅当您使用 SynchronousQueue 时,但这并不是真正的队列)。
除此之外,TransferQueue也是一个BlockingQueue。查看 TransferQueue 中新的可用方法:http://download.oracle.com/javase/7/docs/api/java/util/concurrent/TransferQueue.html http://download.oracle.com/javase/7/docs/api/java/util/concurrent/TransferQueue.html(传输、tryTransfer、hasWaitingConsumer、getWaitingConsumerCount)。
Java SE 7 中集合框架的增强 http://download.oracle.com/javase/7/docs/technotes/guides/collections/changes7.html明确地说:
添加了 TransferQueue 接口。它是 BlockingQueue 接口的改进,生产者可以在其中等待消费者接收元素。此版本中还包含新接口的一种实现:LinkedTransferQueue。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)