Java 線程的停止

使用退出標志位來終止線程

使用一個變量來控制循環(huán),每次循環(huán)時都判斷該變量的值

使用 interrupt 方法停止

線程非阻塞狀態(tài),直接調(diào)用 intercept 會將中斷標志位置為 true ,再循環(huán)是使用 isInterrupted 方法獲取該標志位,如果為 true 則結(jié)束循環(huán)。

線程在阻塞狀態(tài)時,調(diào)用 interrupt 函數(shù)會拋出 InterruptedException ,需要捕獲該異常,并在異常中 break 跳出循環(huán)。拋出異常時會把中斷標志位的 true 置為 false,所以不能使用 isIntercepted 來判斷,需要在異常中跳出。

使用時阻塞非阻塞要同時考慮

public class ThreadSafe extends Thread {  
    public void run() {   
        while (!isInterrupted()){ //非阻塞過程中通過判斷中斷標志來退出  
            try{  
                Thread.sleep(5*1000);//阻塞過程捕獲中斷異常來退出  
            }catch(InterruptedException e){  
                e.printStackTrace();  
                break;//捕獲到異常之后,執(zhí)行break跳出循環(huán)。  
            }  
        }  
    }   
}

使用 stop 方法

該方法是強制終止,會釋放該線程持有的所有鎖,破壞數(shù)據(jù),所以不推薦使用這種方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容