核心概念釐清
- 搶佔式調度:高優先級線程可搶佔低優先級線程 CPU 時間。
- 時間片輪轉:同優先級線程輪流分配固定 CPU 時間片。
- 常見誤區:「搶佔」≠「時間片」。兩者是獨立維度。
平台相關行為差異
| 平台 | 同優先級搶佔 | 高優先級搶佔 | 備註 |
| Solaris | 不支援 | 支援 | 嚴格優先級調度 |
| Windows | 支援(時間片) | 支援 | 時間片機制影響優先級語意 |
JVM 規範不保證搶佔或時間片行為,僅保證 wait()/sleep() 的語意。開發者不可依賴特定平台調度特性編寫邏輯。
搶佔式調度模型
- 多線程處於「可執行」狀態,但同一時刻僅一線程「執行中」。
- 執行中線程持續執行直到:主動放棄(
sleep()、wait()、I/O 阻塞),或更高優先級線程變為可執行(發生搶佔)。
- 所有可執行線程按優先級分組放入就緒隊列。阻塞線程恢復時重回對應優先級隊列。CPU 分配給最高優先級非空隊列中的線程。
實務警示
- 多數 JVM 以隊列實作優先級池,但非規範要求。
- Windows 底層排程器可能導致優先級 4 線程執行,而優先級 5 線程等待——優先級非絕對保證。
- 唯一可攜式的同步手段:
synchronized、wait()/notify()、sleep()、join()、java.util.concurrent 套件。
- 上一篇文章: J2EE 開發 12 大最佳實踐:從 MVC 架構到效能調優
- 下一篇文章: Java 檔案讀取完整範例:位元組流實作與異常處理
Copyright ©
程式碼之家 All Rights Reserved