在InterruptedException捕获块中的currentThread()。interrupt()?

时间:2019-02-15 20:25:58

标签: java multithreading interrupted-exception

在阅读别人的代码时,我遇到了以下问题:

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()有什么作用?

1 个答案:

答案 0 :(得分:0)

InterruptedException并不意味着线程处于中断状态。这意味着线程进入处于中断状态,然后轮询方法(例如Object.waitThread.sleep)检查线程是否处于中断状态(这样做会使线程进入中断状态)。退出中断状态)并引发异常。因此,当捕获到异常时,线程不再处于中断状态。

该catch块的目的似乎是拦截此类异常并将线程放回中断状态。