首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 線程終止的三種情形與 isAlive() 狀態驗證實測

     編輯:Java 相關知識

線程死亡三大路徑

  1. run()/call() 正常執行完畢 → 自然終止
  2. 拋出未捕獲的 Exception 或 Error → 異常終止
  3. 調用已棄用的 stop() 強制終止(嚴禁使用)

注意:主線程結束**不會**導致子線程終止,子線程一旦 `start()` 即獨立平等。

isAlive() 狀態判斷

  • 返回 true:就緒、執行中、阻塞
  • 返回 false:新建、已終止(死亡)

實測案例 1:正常結束

class RunTask implements Runnable {
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.println("子線程存活:" + i);
            sleep(3000);
        }
    }
}

// 主線程每秒輪詢 isAlive()
輸出:
子線程存活:1..10
主線程:true → 最後變 false

實測案例 2:異常終止

if (i == 5) throw new RuntimeException("主動崩潰");
// 輸出:執行到 5 拋異常,主線程 isAlive 迅速變 false

最佳實踐建議

  1. 優雅終止:使用 `volatile boolean running` 標誌 + `interrupt()` 配合
  2. 異常處理:`run()` 內頂層 `try-catch` 記錄日誌,避免無聲消失
  3. 監控:定期 `isAlive()` 或 `Thread.getState()` 監控線程池健康度
  4. 拒絕 `stop()`/`suspend()`/`resume()`:破壞鎖一致性,導致資料損壞
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved