在 Java 中,synchronized 關鍵字用於保護程式碼的關鍵部分不被並發存取。它確保一次只有一個執行緒可以執行同步方法或區塊。然而,同步靜態方法的行為與實例方法略有不同,因為靜態方法沒有關聯的物件。
問題:
鑑於靜態方法沒有關聯的對象,synchronized 關鍵字如何影響它們?具體來說,它是否鎖定類別而不是物件?
答:
是的。當呼叫同步靜態方法時,它會取得與該方法的類別的 Class 物件關聯的監視器。這意味著嘗試執行相同靜態同步方法的多個執行緒必須先取得類別上的鎖才能繼續。
詳細資訊:
如Java 語言中所述規範§8.4.3.6,「同步方法」:
對於類別(靜態)方法,使用與該方法的類別的Class 物件關聯的監視器。
這確保靜態同步方法可用於保護與類別本身相關的資源,而不是與特定實例相關的資源。例如,如果靜態方法存取類別內的共用計數變量,則可以對其進行同步以防止多個執行緒同時存取它並可能導致資料不一致。
以上是Java 中的同步靜態方法是否鎖定類別物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!