Thread中断的理解

★中断的理解:1)中断能够理解为线程的一个标识位属性;2)表示一个运行中的线程是否被其余线程进行了中断操做

中断比如其余线程向该线程打了个招呼,其余线程经过调用该线程的interrupt()方法对其进行中断操做。java

啥意思?this

如上图中所示,运行中的线程(main主线程)调用线程countThread的interrupt()方法,向countThread线程打了个“招呼”,对countThread线程作了中断操做。咱们看JDK源码中interrupt()方法的源码:spa

看注释:线程

// Just to set the interrupt flagcode

说的很是明白,对标识位进行了设置。就是将 interrupt flag 设置为true。将线程的中断标识位 interrupt flag 属性设置为了true。blog

为何说【中断能够理解为线程的一个标识位属性】?

什么叫能够理解为?看一下Thread的JDK源码,实际上找不到这个属性,因此若是有这个属性的话,恐怕也是在更底层(比JDK源码更底层)存在的。因此为了更好的理解,不妨想象有那么一个变量,用来标识线程是否被中断。源码

线程A能够经过调用线程B的class

public void interrupt() {
    if (this != Thread.currentThread())
        checkAccess();

    synchronized (blockerLock) {
        Interruptible b = blocker;
        if (b != null) {
            interrupt0();           // Just to set the interrupt flag
            b.interrupt(this);
            return;
        }
    }
    interrupt0();
}

方法来对线程B进行中断(能够理解为线程A经过调用线程B的interrupe()方法设置了线程B的中断标识位)。变量

线程A能够经过调用线程B的方法

public boolean isInterrupted() {
    return isInterrupted(false);
}

方法来查看线程B是否被设置了中断标识位(中断标识位是否为true),而且不清除中断标识位。

线程A能够经过调用静态方法

public static boolean interrupted() {
    return currentThread().isInterrupted(true);
}

方法来对当前线程的中断标识位进行复位。

相关文章
相关标签/搜索