线程的中断

调用线程中断的时候线程是否立即中断:

1.java 中断是一种协作机制

2.通过中断不能直接终止线程的运行

3.需要被中断的线程自己处理中断

中断流程:

1.每一个线程都有一个boolean类型的标志位,代表线程是否中断

2.线程1 想中断线程2,线程1只需要设置线程2的中断标志位为true

3.线程2在合适的时候处理该中断请求。甚至线程2可以选择不处理中断请求。

 线程中断的相关方法:

1.public static boolean interrupted()

  测试当前线程是否已经中断。线程的中断状态由该方法清除。

  如果已经设置了中断标识的线程再次调用的时候会导致上一步设置的中断标识被清除,即true 被改为flase

2.public boolean isInsterrupted()

  测试线程是否已经中断。线程的中断状态不受该方法影响。

3.public void interrupt()

  将调用该方法的对象所表示的线程标记一个停止标记,并不是真的停止该线程。

public class InteruptedTest {
    public static void main(String[] args) {
        //当前线程
        Thread thread = Thread.currentThread();
        //当前线程是否被中断
        System.out.println("1:"+thread.interrupted());//false
        //设置线程中断标识
        thread.interrupt();
        System.out.println("2:"+thread.interrupted()); //true
        //当前线程是否被中断 interrupted 会消除中断状态
        System.out.println("3:"+thread.interrupted());//false

        //再次设置线程中断标识
        thread.interrupt();
        System.out.println("4:"+thread.isInterrupted()); //true
        //当前线程是否被中断,isInterrupted 不会修改中断状态
        System.out.println("5:"+thread.isInterrupted());//true
    }
}

 

 

interrupt()方法是唯一能将中断状态设置为true的方法。

静态方法interrupted() 会将当前线程的中断状态清除。

说明:这里的中断可以理解为 叫你好好学习,至于要不要好好学习,什么时候好好学习甚至不好好学习决定权在听的人手上而不在说的人手上。

 

posted @ 2020-04-23 21:19  木枝木枝  阅读(150)  评论(0编辑  收藏  举报