小编Rya*_*yan的帖子

在什么条件下BlockingQueue.take会中断异常?

让我们假设我有一个消耗另一个线程产生的项的线程.其运行方法如下,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中或错过中断?

java concurrency interrupt interrupted-exception

8
推荐指数
1
解决办法
9447
查看次数