補充線程組管理、wait/notify 通信模型、yield() 主動讓步與守護線程特性,構建完整多線程工具箱。
ThreadGroup g = new ThreadGroup("MyGroup");new Thread(g, runnable, "Worker-1"); (僅建構時指定,不可變更)。interrupt()、列舉成員 enumerate()、設置統一 setMaxPriority()、調試監控。核心方法定義於 Object:
wait():釋放鎖,進入等待集合,直到被通知或中斷。notify():喚醒任一等待線程 (隨機)。notifyAll():喚醒所有等待線程。class Barrier {
int parties; int waiting = 0;
Barrier(int n) { parties = n; }
synchronized void await() throws InterruptedException {
waiting++;
if (waiting < parties) wait();
else { waiting = 0; notifyAll(); }
}
}
每輪計算完成呼叫 await(),最後一個線程喚醒全體進入下一輪。
notify():單一資源競爭 (如連接池釋放一連線),避免驚群效應。notifyAll():狀態變更影響所有等待者 (如屏障、快取失效),確保無遺漏。// 釋放稀缺資源後
if (releasedRareResource) Thread.yield();
暗示調度器:「我暫時不需要 CPU,請調度其他就緒線程」。不保證切換,不改變優先級。
| 類型 | 特性 | 典型例子 |
|---|---|---|
| 用戶線程 | JVM 存活條件:至少一用戶線程存活 | Main、業務 Worker、Tomcat 請求線程 |
| 守護線程 | 附屬於用戶線程,全體用戶線程結束時 JVM 強制終止它們 | GC、JIT 編譯、監控掃描、定時清理 |