完全合法且常見做法。 執行緒優先級僅影響 **CPU 調度器** 選擇下一個可執行執行緒的順序,動態修改即時生效,不影響執行緒內部邏輯正確性。
Thread.setPriority() 最終呼叫 OS API (如 pthread_setschedparam、SetThreadPriority)。| 項目 | 說明 |
|---|---|
| 非即時搶佔 | 修改後不會**立即**搶佔 CPU,需等待調度器下一次決策。 |
| 平台差異 | Windows 優先級類別較粗糙 (IDLE/BELOW_NORMAL/NORMAL/ABOVE_NORMAL/HIGH/REALTIME),Java 10 級映射不精確。 |
| 不保證公平 | 高優先級可能導致低優先級**飢餓**,長時間計算任務建議配合 Thread.yield() 或睡眠。 |
| 安全性 | 需 SecurityPermission("modifyThread"),沙箱環境可能受限。 |
Thread t = new Thread(() -> {
// 初期低優先級做準備
loadResources();
// 準備完成,提升優先級進入核心迴圈
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (!Thread.interrupted()) {
processFrame();
}
});
t.setPriority(Thread.MIN_PRIORITY); // 啟動前設定初始值
t.start();