interrupt、interrupted 、isInterrupted 區別

一、interrupt 
interrupt方法用於中斷線程。調用該方法的線程的狀態爲將被置爲"中斷"狀態。
注意:線程中斷僅僅是置線程的中斷狀態位,不會中止線程。須要用戶本身去監視線程的狀態爲並作處理。支持線程中斷的方法(也就是線程中斷後會拋出interruptedException的方法)就是在監視線程的中斷狀態,一旦線程的中斷狀態被置爲「中斷狀態」,就會拋出中斷異常。

二、interrupted 和 isInterrupted
 
首先看一下該方法的實現:
public static boolean interrupted () {

     return currentThread().isInterrupted(true);

}

該方法就是直接調用當前線程的isInterrupted(true)方法。

而後再來看一下 isInterrupted的實現:
public boolean isInterrupted () {

     return isInterrupted( false);

}

這兩個方法有兩個主要區別:
  1. interrupted 是做用於當前線程,isInterrupted 是做用於調用該方法的線程對象鎖對應的線程。(線程對象對應的線程不必定是當前運行的線程。例如咱們能夠再A線程去調用B線程的isInterrupted方法。)
  2. 這兩個方法最終都會調用同一個方法,只不過參數一個是true,一個是false;

第二個區別主要體如今調用的方法的參數上,讓咱們來看一看這個參數是什麼含義

先來看一看被調用的方法 isInterrupted(boolean arg)的定義:
private native boolean isInterrupted( boolean ClearInterrupted);

原來這是一個本地方法,看不到源碼。不過不要緊,經過參數名咱們就能知道,這個參數表明是否要清除狀態位。
若是這個參數爲true,說明返回線程的狀態位後,要清掉原來的狀態位(恢復成原來狀況)。這個參數爲false,就是直接返回線程的狀態位。
相關文章
相關標籤/搜索