邏輯分組管理執行緒,支援批次操作:
ThreadGroup group = new ThreadGroup("WorkerGroup");
Thread t1 = new Thread(group, task, "Worker-1");
Thread t2 = new Thread(group, task, "Worker-2");
// 批次中斷
group.interrupt();
// 列舉成員
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
必須在 synchronized 區塊內使用,針對同一個物件鎖:
// 等待條件
synchronized (lock) {
while (!condition) {
lock.wait(); // 釋放鎖並進入等待集合
}
// 條件滿足,繼續執行
}
// 通知條件變更
synchronized (lock) {
condition = true;
lock.notifyAll(); // 喚醒所有等待執行緒
}
| 方法 | 行為 |
|---|---|
| wait() | 釋放鎖,進入等待集合,需 notify 喚醒 |
| sleep() | 保持鎖,指定時間後自動喚醒 |
| yield() | 讓出 CPU,同優先級執行緒可執行 |
多執行緒分階段計算,各階段需全部完成才能進入下一階段:
// 使用 CyclicBarrier (推薦)
CyclicBarrier barrier = new CyclicBarrier(N, () -> mergeResults());
// 每個執行緒
public void run() {
phase1();
barrier.await(); // 等待所有人完成 phase1
phase2();
barrier.await(); // 等待所有人完成 phase2
}
setDaemon(true) 標記為守護執行緒提示排程器當前執行緒願意讓出處理器,但不保證立即切換。適用於長時間計算任務主動降低優先級。