请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sleep()清除中断标记的问题

package cn.java.threadcoreknowledge.stopthread;

public class RightStopThreadInProd implements Runnable {
    @Override
    public void run() {
        while(true && !Thread.currentThread().isInterrupted()) {
            System.out.println("go");
            try {
                throwInMethod();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void throwInMethod() throws InterruptedException {
            Thread.sleep(2000);
    }

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new RightStopThreadInProd());
        thread.start();
        Thread.sleep(1000);
        thread.interrupt();
    }
}

这是照着课程敲的代码,我有两个地方不懂:

我的理解是throwInMethod方法中的sleep方法接收到中断信息后会清除中断标记,那么循环条件中的“!Thread.currentThread().isInterrupted()“有什么用呢? 2:为什么执行该代码后,程序抛出异常后依旧继续执行循环,而不是停止呢?

图片描述

正在回答 回答被采纳积分+3

1回答

悟空 2021-05-28 11:22:57

1. 为了处理这种情况:还没执行到sleep,就被!Thread.currentThread().isInterrupted()判断到了。

2.因为异常被catch住了

1 回复 有任何疑惑可以回复我~
  • 提问者 大魔王kite #1
    把这章的课程又看了遍,懂了,谢谢老师
    回复 有任何疑惑可以回复我~ 2021-05-29 16:29:36
  • 补充下第二点,并且 "catch" 也清除了通知中断的标记位
    回复 有任何疑惑可以回复我~ 2021-06-19 21:18:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信