首页 > 技术文章 > isInterrupted()方法和interrupted()方法辨析

hello-liu 2021-10-03 18:38 原文

注意Thread.interrupted()方法的目标对象是"当前线程",而不管本方法来自于哪个对象

比如看如下代码:

package threadcoreknowledge.test;

public class interrupte {



    public static void main(String[] args) throws InterruptedException {

        Thread threadOne = new Thread(new Runnable() {
            @Override
            public void run() {
                for (; ; ) {
                }
            }
        });

        // 启动线程
        threadOne.start();
        //设置中断标志
        threadOne.interrupt();

        //获取中断标志
        System.out.println("isInterrupted: " + threadOne.isInterrupted());
        //获取中断标志并重置
        System.out.println("isInterrupted: " + threadOne.interrupted());

        //获取中断标志并重直
        System.out.println("isInterrupted: " + Thread.interrupted());
        //获取中断标志
        System.out.println("isInterrupted: " + threadOne.isInterrupted());
        threadOne.join();
        System.out.println("Main thread is over.");
    }
}

错误的判断方法会认为输出结果是true、ture、false、false

但是实际上第二个判断threadOne.interrupted()方法是对执行它的线程做判断,因为interrupted()方法为静态方法。执行它的线程此时是Thread主线程,因为threadOne线程已经停止了,所以第二个判断应该为false,第三个判断也为false,第四个判断为true

推荐阅读