美文网首页
interrupt()方法不起作用的原因

interrupt()方法不起作用的原因

作者: 野小火 | 来源:发表于2019-01-15 17:03 被阅读19次

    当线程A正在wait或者sleep的时候,其他线程调用线程A的interrupt方法后,线程A会抛出InterruptedException异常信息。

    但是如果出现一下代码的时候你会发现不会抛出InterruptedException异常信息

    Thread threadA = new Thread() {
        @Override
        public void run() {
            long time = System.currentTimeMillis();
            while (System.currentTimeMillis() - time < 1000) {
                // 执行while的时候不会检查线程中断状态
                // 假如这个期间,我们对当前线程进行了interrupt操作
            }
            // 如果这里先将线程睡眠或者wait,
            try {
                // sleep或者wait的时候会检查线程中断状态
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // 因为while期间的intterrupt,抛出了异常。
            }
            // 这里如果再调用isIntterrupted()方法的时候,你会发现线程不处于中断状态了。
            try {
                System.out.println("线程开始等待");
                synchronized (this) {
                    // 当再次进行wait的时候,你会发现不会再抛出异常了
                    wait(); 
                }
                System.out.println("等待结束");
            } catch (InterruptedException e) {
                System.err.println("wait InterruptedException");
            }
        }
    };
    

    相关文章

      网友评论

          本文标题:interrupt()方法不起作用的原因

          本文链接:https://www.haomeiwen.com/subject/qbbydqtx.html