在跨平台 Java 環境中,依賴執行緒優先級動態分配 CPU 資源極不可靠:JVM 未實作排程器,執行緒映射至 OS 原生執行緒,優先級數量與調度行為因平台而異(Windows 甚至反對動態調整);且大量執行緒物件記憶體開銷龐大(NT 4.0 約 30KB/執行緒),不適合大規模並發任務。
核心思想:將任務封裝為訊息(Method 物件 + 參數),置入優先級佇列,由調度器(單一執行緒死循環)依優先級取出並 invoke() 執行。任務主動釋放 CPU(遞迴調用調度器)實現協作式切換。
java.lang.reflect.Method 封裝,支援動態調度。Runnable(調度器)可被多個 Thread 執行,動態增減執行緒數即動態調整該佇列 CPU 佔用比例。✅ 平台無關、無執行緒優先級綁定、動態調整靈活、高負載下保障核心業務。
⚠️ 調度粒度較粗(以單次訊息處理為單位),耗時邏輯需手動插入讓出點;佇列取訊息互斥為潛在瓶頸(建議訊息處理成本遠大於取出成本)。
同步/互斥可用 synchronized、wait/notify 實現;任務主動讓出特性使同步機制更自然。