在阅读别人的代码时,我遇到了以下问题:
class Worker extends Thread {
....
public void run() {
try {
while ( true ) {
..... DO WORK .....
}
} catch ( InterruptedException e ) {
Thread.currentThread().interrupt();
} catch ( RuntimeException e ) {
handleFatal( e );
}
}
}
在catch块内调用Thread.currentThread().interrupt()
有什么作用?
确定当前正在运行的线程(此Worker
实例)已经被中断了吗?在已经中断的线程上再次调用interrupt()
有什么作用?
答案 0 :(得分:0)
InterruptedException
并不意味着线程处于中断状态。这意味着线程进入处于中断状态,然后轮询方法(例如Object.wait
或Thread.sleep
)检查线程是否处于中断状态(这样做会使线程进入中断状态)。退出中断状态)并引发异常。因此,当捕获到异常时,线程不再处于中断状态。
该catch块的目的似乎是拦截此类异常并将线程放回中断状态。