【发布时间】:2011-10-13 08:59:32
【问题描述】:
我正在阅读一些 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,则立即。 (可中断方法 通常在阻塞或执行任何重要操作之前轮询中断 工作,以便尽可能应对中断。)
我不明白为什么要在本地保存中断状态。
我很高兴听到一些解释。
【问题讨论】:
标签: java multithreading