現代伺服器端 Java 應用(J2EE、網管系統等)常需同時處理成千上萬個併發任務,且不同業務對響應時效要求各異(如白天優先電子商務、晚上優先娛樂下載)。傳統做法將每個任務對應一個 Java Thread,並靠調整 Thread.setPriority() 來分配 CPU,但在跨平台環境下存在兩大缺陷:
核心思想:任務不直接綁定 Thread,而是封裝為「訊息」放入優先級隊列,由固定數量的 Worker Thread 輪詢執行。
Method 物件(利用 java.lang.reflect.Method),封裝成 Message 置入隊列。method.invoke(target, args) 執行。Yield() / VB DoEvents。Runnable(調度迴圈),可為其配置 N 個 Thread 服務。new Thread(runnable).start() 或讓線程自然結束,即可即時調整各任務組佔用的 CPU 比例。| 議題 | 處理方式 |
|---|---|
| 同步/互斥 | Java synchronized、wait()/notify() 直接適用(任務可主動讓出執行權)。 |
| 調度粒度 | 以單次訊息處理為粒度;若單一訊息過長,開發者需在邏輯中主動插入讓出點(呼叫調度函數)。 |
| 隊列存取瓶頸 | 假設取訊息成本遠小於處理成本;高頻簡短訊息可直接在取出時內聯執行,減少鎖競爭。 |
此方案利用 Java 反射機制與線程池,構建出一個平台無關、可動態分配 CPU 資源的協調式多任務框架,特別適合大規模併發、優先級多變的伺服器端應用。