[英]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.