簡體   English   中英

鎖定“ Class”類對象上的實現以進行同步

[英]Lock implemention on “Class” class object for synchronization

我正在通過此鏈接 根據這個 :

類鎖實際上是作為對象鎖實現的。 JVM加載類文件時,將創建類java.lang.Class的實例。 當您鎖定一個類時,實際上是在鎖定該類的Class對象。

但是根據java規范,堆上所有相同類型(類)的對象共享一個Class對象。 那么,對於對象的多線程同步訪問又如何呢?

類鎖

synchronized (String.class) {...}

對象鎖

//doesn't matter what the lock object is as long as it's not null
private final Object lock = new Object(); 
...
synchronized (lock) {...} // will throw NPE if lock is null

它們都被視為object鎖,因為String.class返回Class<String>的實例。

在類鎖中,線程獲取Class<String>實例監視器。 在對象鎖中,線程獲取String實例監視器。

但是根據java規范,堆上所有相同類型(類)的對象共享一個Class對象。 那么,對於對象的多線程同步訪問又如何呢?

只有同步的 靜態方法才需要線程來獲取對象的鎖。 所有同步的實例方法將需要不共享的相關實例對象的鎖。

但是根據java規范,堆上所有相同類型(類)的對象共享一個Class對象。 那么,對於對象的多線程同步訪問又如何呢?

類級鎖在靜態方法中更有意義。 如果在靜態方法上使用synced關鍵字,則其監視器用於鎖定的對象是類對象,即,由文字Class.class表示的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM