isInterrupted() interrupt() interrupted() 方法的简单解释

isInterrupted() interrupt() interrupted() 方法的简单解释

1、isInterrupted() 和 interrupt() 是实例方法,必须要通过对象实例来调用,
interrupt()方法给线程做一个终止标志,只是简单的做一个标记。isInterrupted()方法返回的是布尔类型,是判断线程是否做了终止标记。调用interrupt() 方法时候如果线程处于阻塞状态,会抛出异常。isInterrupted()和 interrupt()一般会配合使用,先判断是否做了终止标记,如果没有则调用interrupt()方法。终止线程时候先判断isInterrupted()是否有终止标记,如果有,则进行自己编辑终端的逻辑。
2、interrupted()是静态方法,属于类级别的方法。interrupted()底层方法是获取当前线程,然后用当前线程实例来调用isInterrupted(true)这个方法。ClearInterrupted 参数的作用是,是否清除当前的终止标记,假设先调用了interrupt()这个方法进行终止标记,然后调用isInterrupted会返回的是true,接着调用interrupted()方法,然后在调用isInterrupted这个方法会返回false,因为interrupted()方法进行了终止标记的消除。
isInterrupted() interrupt() interrupted() 方法的简单解释
3、测试代码

public static void main(String[] args){
        //获取当前运行线程
        Thread thread = Thread.currentThread();
        //第一次判断
        System.out.println(thread.getName()+"---第一次判断当前线程是否被进行中断标记,结果为:"+thread.isInterrupted());
        //判断如果没有被中断标记
        if (!thread.isInterrupted()){
            //进行中断标记
            System.out.println(thread.getName()+"---进行中断标记操作");
            thread.interrupt();
        }
        //第二次进行判断
        System.out.println(thread.getName()+"---第二次判断当前线程是否被进行中断标记,结果为:"+thread.isInterrupted());
        //第三次进行判断
        System.out.println(thread.getName()+"---第三次判断当前线程是否被进行中断标记,结果为:"+thread.isInterrupted());
        //调用 Thread.interrupted(),返回当前线程被标记中断的状态,并且进行清除当前中断标记状态
        System.out.println("当前线程的中断标记状态为:"+Thread.interrupted());
        //第四次进行判断
        System.out.println(thread.getName()+"---第四次判断当前线程是否被进行中断标记,结果为:"+thread.isInterrupted());

    }

运行结果:
isInterrupted() interrupt() interrupted() 方法的简单解释