关于线程中断状态的疑问

发布于 2022-09-12 02:07:37 字数 1112 浏览 30 评论 0

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。这是为啥呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我是男神闪亮亮 2022-09-19 02:07:37

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文