線程-中斷
- 中斷(interrupt)只是線程的一種狀態(tài),它不會拋出中斷異常(throw InterruptedException),但是在
Object.wait、Thread.Sleep、join等方法會監(jiān)控線程的中斷狀態(tài),如果中斷狀態(tài)是true則拋出中斷異常。 - 中斷不會讓線程結(jié)束,它只是讓處于阻塞的線程,跳出當(dāng)前狀態(tài),向下流轉(zhuǎn)。當(dāng)然在
Thread的設(shè)計者最初目的是通過中斷結(jié)束當(dāng)前線程,可是實際業(yè)務(wù)中,一般不會直接讓線程直接結(jié)束,而是通過異常捕獲機制,捕獲之后做出相關(guān)的業(yè)務(wù)處理。 - 在使用中斷方法時,一定要注意
Thread類中的public static boolean interrupted() { return currentThread().isInterrupted(true); } public boolean isInterrupted() { return isInterrupted(false); } private native boolean isInterrupted(boolean ClearInterrupted);
其中static boolean interrupted()是清除中斷狀態(tài),也就是執(zhí)行后,interrupt=false。
而boolean isInterrupted()的意思是,設(shè)置interrupt=true。兩者完全相反的含義。