首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 多線程進階:線程組、線程通信、yield 讓步、守護線程

     編輯:Java 相關知識

補充線程組管理、wait/notify 通信模型、yield() 主動讓步與守護線程特性,構建完整多線程工具箱。

一、線程組

  • 建立:ThreadGroup g = new ThreadGroup("MyGroup");
  • 歸屬:new Thread(g, runnable, "Worker-1"); (僅建構時指定,不可變更)。
  • 功能:批量 interrupt()、列舉成員 enumerate()、設置統一 setMaxPriority()、調試監控。
  • 結構:樹狀層級,類似檔案目錄,支援巢狀群組。

二、線程通信 — wait/notify 機制

核心方法定義於 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() vs notifyAll()

  • notify():單一資源競爭 (如連接池釋放一連線),避免驚群效應。
  • notifyAll():狀態變更影響所有等待者 (如屏障、快取失效),確保無遺漏。

三、yield() 主動讓步

// 釋放稀缺資源後
if (releasedRareResource) Thread.yield();

暗示調度器:「我暫時不需要 CPU,請調度其他就緒線程」。不保證切換,不改變優先級。

四、守護線程

thread.setDaemon(true); // 必須在 start() 前調用

注意:守護線程的 finally 區塊可能不執行 (JVM 直接終止),資源釋放需謹慎設計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型特性典型例子
用戶線程JVM 存活條件:至少一用戶線程存活Main、業務 Worker、Tomcat 請求線程
守護線程附屬於用戶線程,全體用戶線程結束時 JVM 強制終止它們GC、JIT 編譯、監控掃描、定時清理