我正在读取一些java线程中断,并且我不理解某些内容。希望有人会解释我。所以,它的完成下面的代码在退出之前恢复中断的不可撤销任务
public Integer getInteger(BlockingQueue<Integer> queue) {
boolean interrupted = false;
try {
while (true) {
try {
return queue.take();
} catch (InterruptedException e) {
interrupted = true;
// fall through and retry
}
}
} finally {
if (interrupted)
Thread.currentThread().interrupt();
}
}
的解释如下:不支持取消,但仍呼吁 中断阻塞方法将不得不叫他们在一个循环
活动, 检测到中断时重试。在这种情况下,他们应该在本地保存 中断状态,并在返回前将其恢复, 如清单所示。而不是立即捕获 InterruptedException。设置中断状态过早可能导致 无限循环,因为大多数可中断阻塞 方法检查入口处的中断状态,并且如果设置立即抛出 InterruptedException。 (可中断方法 通常阻止或做任何显著 工作之前轮询中断,以便作为响应中断,才可能进行。)
我不明白为什么我们要在本地保存中断状态。
我很乐意听到一些解释。
嗯。有趣的... –