“关闭”阻塞队列
我在一个非常简单的生产者-消费者场景中使用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的性质,将“毒物”推入队列并非易事。因此,这种“常见策略”在我的场景中并不方便。
我的问题是:我可以使用哪些其他好的策略/模式来“关闭”队列?
谢谢!