notify/notifyAll 不保證喚醒順序許多開發者誤以為呼叫 notify() 或 notifyAll() 時,等待中的執行緒會依優先級高低或等待時間長短被喚醒。這完全是錯誤的假設。 Java 記憶體模型規範並未定義喚醒順序,具體行為取決於 JVM 實作與底層作業系統排程器,屬於「不確定行為」。
notify():隨機喚醒單一執行緒,優先級高者不一定優先。notifyAll():喚醒所有等待執行緒,但後續競爭鎖的順序同樣不受優先級保證。若業務邏輯要求特定喚醒順序,可採用 Specific Notification Pattern(精確喚醒模式):
notify(),精確控制喚醒對象。Real-Time Specification for Java (RTSJ) 強制等待佇列依優先級排序,但此做法:
永遠不要假設執行緒喚醒順序。設計同步機制時,應假設喚醒順序完全隨機,透過程式邏輯(如狀態旗標、專屬鎖)確保正確性。