interrupt方法用于中斷線程。調(diào)用該方法的線程的狀態(tài)為將被置為”中斷”狀態(tài)。 注意:線程中斷僅僅是置線程的中斷狀態(tài)位,不會停止線程。需要用戶自己去監(jiān)視線程的狀態(tài)為并做處理。支持線程中斷的方法(也就是線程中斷后會拋出interruptedException的方法)就是在監(jiān)視線程的中斷狀態(tài),一旦線程的中斷狀態(tài)被置為“中斷狀態(tài)”,就會拋出中斷異常。
方法實現(xiàn)
public boolean isInterrupted () { return isInterrupted(false);}public static boolean interrupted () { return currentThread().isInterrupted(true);}方法實現(xiàn)
PRivate native boolean isInterrupted( boolean ClearInterrupted);如果參數(shù)為true,在返回線程狀態(tài)位后需要重置線程狀態(tài),即重置到原來的狀態(tài)
參數(shù)為false,直接返回線程的狀態(tài)位
**interrupt()是用來設(shè)置中斷狀態(tài)的。返回true說明中斷狀態(tài)被設(shè)置了而不是被清除了。我們調(diào)用sleep、wait等此類可中斷(throw InterruptedException)方法時,一旦方法拋出InterruptedException,當(dāng)前調(diào)用該方法的線程的中斷狀態(tài)就會被jvm自動清除了,就是說我們調(diào)用該線程的isInterrupted 方法時是返回false。如果你想保持中斷狀態(tài),可以再次調(diào)用interrupt方法設(shè)置中斷狀態(tài)。這樣做的原因是,java的中斷并不是真正的中斷線程,而只設(shè)置標(biāo)志位(中斷位)來通知用戶。如果你捕獲到中斷異常,說明當(dāng)前線程已經(jīng)被中斷,不需要繼續(xù)保持中斷位。 interrupted是靜態(tài)方法,返回的是當(dāng)前線程的中斷狀態(tài)。例如,如果當(dāng)前線程被中斷(沒有拋出中斷異常,否則中斷狀態(tài)就會被清除),你調(diào)用interrupted方法,第一次會返回true。然后,當(dāng)前線程的中斷狀態(tài)被方法內(nèi)部清除了。第二次調(diào)用時就會返回false。如果你剛開始一直調(diào)用isInterrupted,則會一直返回true,除非中間線程的中斷狀態(tài)被其他操作清除了。**
新聞熱點
疑難解答