【问题标题】:currentThread().interrupt() inside InterruptedException catch block? [duplicate]CurrentThread().interrupt() 在 InterruptedException 捕获块内? [复制]
【发布时间】:2019-02-15 20:25:58
【问题描述】:

在阅读别人的代码时,我发现了以下内容:

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() 的目的是什么?

【问题讨论】:

    标签: java multithreading interrupted-exception


    【解决方案1】:

    InterruptedException 并不意味着线程处于中断状态。这意味着线程进入中断状态,然后轮询方法(如Object.waitThread.sleep)检查线程是否处于中断状态(这样做会使线程脱离中断状态) state) 并抛出异常。所以当异常被捕获时,线程不再处于中断状态。

    看来那个catch块的目的就是拦截这样的异常,让线程回到被中断的状态。

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2021-06-16
      • 2015-04-17
      • 1970-01-01
      • 2013-01-12
      • 2016-07-15
      相关资源
      最近更新 更多