Thread.interrupted概述

package org.apache.ibatis.cache;

import org.junit.Test;

/**
 * 
 * 2021/7/14 7:37 下午
 */
public class InteruprTest {
    /**
     *
     * Thread.interrupted(); 标志位恢复
     * Thread.currentThread().isInterrupted() 判断当前线程是否中断 可重复调用
     * @throws InterruptedException
     */
    @Test
    public void m1(){
        Thread.currentThread().interrupt();
        System.out.println("mainThread:"+Thread.currentThread().isInterrupted()); //true
        Thread t = new Thread(()->{
            while (true) {
                System.out.println("t线程中断标识"+Thread.currentThread().isInterrupted());
                if (Thread.currentThread().isInterrupted()) {
                    System.out.println("t线程中断标识"+Thread.currentThread().isInterrupted()); // true
                    System.out.println("t线程中断标识 interrupted = "+Thread.interrupted()); // true  重置为false
                    System.out.println("t线程中断标识"+Thread.currentThread().isInterrupted()); // false
                    break;
                }
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("sleep catch会重置标识 t线程中断标识"+Thread.currentThread().isInterrupted());  //false
                System.out.println("t 线程触发中断");
            }
            System.out.println("hello");
        });
        t.start();

        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            System.out.println("main 线程触发中断"); // 触发
            e.printStackTrace();
        }
        t.interrupt();
        System.out.println("111="+t.isInterrupted()); //true
    }
}

posted @ 2021-07-15 10:43  AlbertXe  阅读(525)  评论(0编辑  收藏  举报