使用退出標(biāo)志位來終止線程
使用一個變量來控制循環(huán),每次循環(huán)時都判斷該變量的值
使用 interrupt 方法停止
線程非阻塞狀態(tài),直接調(diào)用 intercept 會將中斷標(biāo)志位置為 true ,再循環(huán)是使用 isInterrupted 方法獲取該標(biāo)志位,如果為 true 則結(jié)束循環(huán)。
線程在阻塞狀態(tài)時,調(diào)用 interrupt 函數(shù)會拋出 InterruptedException ,需要捕獲該異常,并在異常中 break 跳出循環(huán)。拋出異常時會把中斷標(biāo)志位的 true 置為 false,所以不能使用 isIntercepted 來判斷,需要在異常中跳出。
使用時阻塞和非阻塞要同時考慮
public class ThreadSafe extends Thread {
public void run() {
while (!isInterrupted()){ //非阻塞過程中通過判斷中斷標(biāo)志來退出
try{
Thread.sleep(5*1000);//阻塞過程捕獲中斷異常來退出
}catch(InterruptedException e){
e.printStackTrace();
break;//捕獲到異常之后,執(zhí)行break跳出循環(huán)。
}
}
}
}
使用 stop 方法
該方法是強制終止,會釋放該線程持有的所有鎖,破壞數(shù)據(jù),所以不推薦使用這種方式