| 方法 | 作用 | 狀態 |
suspend() | 掛起指定線程 | 棄用 |
resume() | 喚醒掛起線程 | 棄用 |
sleep(ms) | 當前線程休眠 | 推薦 |
關鍵差異:suspend 可跨線程操作,sleep 僅影響當前線程。
棄用原因:可能導致死鎖/數據不一致等不可預期後果。
sleep() 使用細節
- 兩個重載:
sleep(long ms), sleep(long ms, int ns)
- 納秒精度通常不可達,JVM 取最接近毫秒值
- 必須捕獲 InterruptedException (run() 不能 throws)
- 休眠中被
interrupt() → 拋出異常並清除中斷標誌
三、終止線程三種方式
1. 退出標誌位 (推薦,優雅)
public volatile boolean exit = false;
public void run() { while (!exit); }
main() { thread.exit = true; thread.join(); }
volatile 保證跨線程可見性。
2. stop() 強制終止 (極度不推薦)
如強制斷電,可能導致鎖未釋放、數據損壞、資源洩漏。
3. interrupt() 中斷 (標準方式)
場景 A:線程阻塞中 (sleep/wait/join)
thread.sleep(50000);
thread.interrupt(); // sleep 拋出 InterruptedException → 線程結束
場景 B:運行中輪詢標誌
while (!Thread.interrupted()) { ... } // 或 !isInterrupted()
兩判斷方法區別:
Thread.interrupted():靜態,檢查當前線程並清除標誌
isInterrupted():實例,檢查指定線程、不清除標誌
- 上一篇文章: Java 多線程 join() 方法詳解:異步轉同步、100線程驗證與命令行參數控制
- 下一篇文章: Java 多線程創建方式二:實現 Runnable 接口、Thread 構造器傳入與啟動
Copyright ©
程式碼之家 All Rights Reserved