1.正常運行結束
程序運行結束,線程自動結束。
2.使用退出標誌退出線程
一般 run() 方法執行完,線程就會正常結束。然而,常常有些線程是伺服線程。
伺服線程,不間斷地執行,往往在run方法中有一個死循環,監視着某些條件,只有當這些條件滿足時才能結束。
使用一個變量來控制循環,例如:最直接的方法就是設一個 boolean 類型的標誌,並通過設置這個標誌爲 true 或 false 來控制 while 循環是否退出,代碼示例:
public class ThreadSafe extends Thread {
public volatile boolean exit = false;
public void run() {
while(!exit) {
// do something
}
}
}
定義了一個退出標誌 exti ,當 exit 爲 true 時,while 循環退出,exit 的默認值爲 false。
在定義 exit 時,使用了一個 Java 關鍵字 volatile,這個關鍵字的目的是使 exit 同步,也就是說同一時刻只能有一個線程來修改 exit 的值。
3. Interrupt 方法結束線程
使用 interrupt() 方法來中斷線程有兩種情況:
1.線程處於阻塞狀態:如使用了 sleep,同步鎖的 wait,socket 中的 receiver,accept 等方法時,會使線程處於阻塞狀態。
當調用線程的 interrupt() 方法時,會拋出 Interrupt