中斷比如其餘線程向該線程打了個招呼,其餘線程經過調用該線程的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); }
方法來對當前線程的中斷標識位進行復位。