Java 多線程開發中,Thread 類提供的核心方法是控制線程生命週期與行為的基礎。本文系統整理常用方法的作用、參數與注意事項。
線程啟動與執行
- start():啟動線程,JVM 呼叫
run() 方法,線程進入就緒狀態
- run():線程執行體,**不可直接呼叫**(直接呼叫變成普通方法調用,不會開啟新線程)
線程休眠與讓步
- sleep(long millis) / sleep(long millis, int nanos):當前線程睡眠指定時間,**不釋放鎖**,時間到自動進入就緒狀態(非執行狀態)
- yield():暫停當前線程,讓同優先級或更高優先級的線程獲得執行機會,**不保證一定讓步成功**,不釋放鎖
線程優先級
- setPriority(int newPriority):設定優先級,範圍 1 (
MIN_PRIORITY) ~ 10 (MAX_PRIORITY),預設 5 (NORM_PRIORITY)
- getPriority():獲取當前優先級
優先級只是調度提示,不保證執行順序,跨平台表現可能不同。
線程等待與合併
- join() / join(long millis) / join(long millis, int nanos):當前線程等待目標線程終止(或超時),常用於主線程等待子線程完成
- 範例:線程 A 呼叫 B.
join(),B 結束後 A 才繼續執行
線程狀態轉換圖解
NEW --start()--> RUNNABLE <-------> RUNNING
^ | sleep/yield/join
| v
BLOCKED/WAITING --notify/timeout--> RUNNABLE
常見誤區提醒
sleep() 不釋放同步鎖,wait() 才會釋放
yield() 不會進入阻塞狀態,只是重新參與調度
join() 底層實際是輪詢 isAlive() 配合 wait(0) 實現
- 優先級不要過度依賴,關鍵邏輯應用同步機制保證