关于线程中断状态的疑问

public static void main(String[] args) throws InterruptedException {
    Thread thread = new Thread(() -> {
      try {
        System.out.println(Thread.currentThread());
        Thread.sleep(100000);
        System.out.println("执行");
      } catch (InterruptedException e) {
        System.out.println(Thread.currentThread());
        System.out.println("检测到中断异常");
        System.out.println("线程中断状态:" + Thread.currentThread().isInterrupted());
        Thread.currentThread().interrupt();
        System.out.println("线程中断状态:" + Thread.currentThread().isInterrupted());
        System.out.println("线程激活状态:" + Thread.currentThread().isAlive());
        System.out.println("线程是否守护:" + Thread.currentThread().isDaemon());
      }
    });

    thread.start();
    Thread.sleep(2000);
    System.out.println("开始中断");
    thread.interrupt();
  }
输出结果
Thread[Thread-0,5,main]
开始中断
Thread[Thread-0,5,main]
检测到中断异常
线程中断状态:false
线程中断状态:true
线程激活状态:true
线程是否守护:false

当我中断线程thread后,打印thread的中断状态为false,我必须手动的在异常捕获中interrupt,thread中断状态才能变为ture。这是为啥呢?

阅读 1.5k
1 个回答

InterruptedException异常被捕获之后标志位清空了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题