傳統進程擁有獨立位址空間,進程間通訊昂貴且複雜(管道、訊息佇列、共享記憶體、訊號處理)。上下文切換開銷大,且同一時間只能與一個進程互動。
線程是進程內單一循序控制流,又稱「輕量級進程」。多線程共享相同位址空間,通訊簡單高效,上下文切換極快。善用多線程可大幅簡化應用設計,提升互動性、GUI 響應與伺服器吞吐量。
Java 採用搶佔式調度,線程生命週期包含 5 個狀態:
| 狀態 | 說明 |
|---|---|
| Newborn | 已創建未啟動,佔用記憶體、私有數據已初始化,可透過 start() 進入就緒或 stop() 終止 |
| Runnable | 就緒狀態,等待 CPU 資源,已被放入調度佇列。同優先級遵循先來先服務,高優先級可搶佔 |
| Running | 正在執行,擁有 CPU 控制權,除非被更高優先級搶佔或主動釋放 |
| Blocked | 暫時無法進入就緒佇列(睡眠、掛起、等待訊息),需外部事件喚醒 |
| Dead | 正常結束或被強制終止,不再進入就緒佇列 |
sleep()) → 時間到自動恢復wait())public class Counter extends Thread {
public void run() { /* 線程邏輯 */ }
}
缺點:單繼承限制,無法繼承其他業務類。
public class Counter implements Runnable {
private Thread t;
public void run() { /* 線程邏輯 */ }
}
優點:打破單繼承限制,更靈活。
start():啟動線程,調用 run()stop():停止執行(已棄用,不建議使用)suspend()/resume():掛起/恢復(已棄用)yield():暫時讓出 CPUsleep(ms):睡眠指定毫秒wait()/notify()/notifyAll():線程間協作通訊Java 使用監視器模式解決同步問題。每個擁有 synchronized 方法的物件實例擁有唯一監視器:
notify() 喚醒等待線程setPriority(int):設定優先級(1-10)getPriority():獲取優先級掌握線程機制,是編寫高性能 Java 應用的基石。