簡體   English   中英

使用內部鎖時,JVM如何確定實例?

[英]How JVM determines instance when using intrinsic lock?

例:

Object lock = createLock();
synchronized (lock) {
    //some statements
}

我有一些lock實例,但是不知道此方法是針對所有應用程序還是僅針對本地應用程序的單例實例?

我如何確定這一點,而又找不到該對象創建的位置以及JVM如何為不同的線程確定這一點?

只能通過檢查鎖的來源來確定鎖的范圍。 JVM不需要確定有關該對象的任何內容,它只需執行告知的操作,並將提供的對象用作鎖定令牌。 如果不是單例,則鎖定機制將失敗。

docs.oracle.com/javase/tutorial/essential/concurrency/…“內部”是指我們在同步語句中使用的內部對象

這是關於內置到每個對象的標頭中的鎖的討論。 如果您有一個Object實例,則擁有這些鎖之一。

基元沒有這種鎖定。

java.util.concurrent.Lock具有非內部鎖定,盡管令人困惑的是它具有固有的啟用。

在您的示例中,變量lock就是這樣:它是一個變量。

synchronized語句將鎖定它所給定的對象的鎖。 在您的示例中,它鎖定您的lock變量所引用的對象。

那么,您的lock變量是否指向單例? 它是局部變量嗎? 它是某個類中的實例變量嗎? 我們無法回答這些問題,因為您沒有向我們顯示代碼。

暫無
暫無

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

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