Rya*_*yan 8 java concurrency interrupt interrupted-exception
让我们假设我有一个消耗另一个线程产生的项的线程.其运行方法如下,inQueue为BlockingQueue
boolean shutdown = false;
while (!shutdown) {
try {
WorkItem w = inQueue.take();
w.consume();
} catch (InterruptedException e) {
shutdown = true;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,一个不同的线程将通过中断此运行的线程来发出没有更多工作项的信号.如果不需要阻塞来检索下一个工作项,take()会抛出一个中断的异常.即如果生产者发出信号说它已完成填充工作队列,是否可能意外地将一些物品留在inQueue中或错过中断?
发出阻塞队列终止信号的一个好方法是向队列提交一个“毒药”值,表明发生了关闭。这确保了队列的预期行为得到遵守。如果您关心清除队列,则调用 Thread.interupt() 可能不是一个好主意。
提供一些代码:
boolean shutdown = false;
while (!shutdown) {
try {
WorkItem w = inQueue.take();
if (w == QUEUE_IS_DEAD)
shutdown = true;
else
w.consume();
} catch (InterruptedException e) {
// possibly submit QUEUE_IS_DEAD to the queue
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9447 次 |
| 最近记录: |