我在一个非常简单的生产者-消费者场景中使用java.util.concurrent.BlockingQueue 。例如,这个伪代码描述了消费者部分:
class QueueConsumer implements Runnable {
@Override
public void run() {
while(true)
{
try {
ComplexObject complexObject = myBlockingQueue.take();
//do something with the complex object
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
到目前为止,一切都很好。在阻塞队列的javadoc中我读到:
BlockingQueue 本质上不支持任何类型的“关闭”或“关闭”操作来指示不再添加项目。此类功能的需求和使用往往取决于实现。例如,一种常见的策略是生产者插入特殊的流尾或有毒对象,当消费者采用时会相应地解释这些对象。
不幸的是,由于使用的泛型和 ComplexObject 的性质,将“毒物”推入队列并非易事。所以这种“通用策略”在我的场景中并不是很方便。
我的问题是:我可以使用哪些其他好的策略/模式来“关闭”队列?
谢谢!