簡體   English   中英

同步方法是否具有自己的鎖?

[英]Do synchronized methods have locks of their own?

假設我有

class myClass {

    synchronized methodA { };

    synchronized methodB { };
}

這是否意味着有2個隱式鎖? 一種用於方法A,一種用於B? 我在讀Gayle McDowell撰寫的《破解編碼訪談》,她說鎖定發生在方法+對象級別,而不是對象級別。 我的印象是myClass僅具有一個鎖,每個同步方法都使用該鎖。 誰能解釋?

這個

synchronized void methodA 
{
  //code
}

相當於

void methodA 
{
  synchronized(this)
  {
    //code
  }

}

因此,在方法前面進行synchronized將使用對象本身的實例作為鎖。

這兩種方法都使用相同的鎖。 Java中的每個對象都有其內部互斥量。

synchronized void method() {}

synchronized(this) {}

使用相同的鎖。

但是,如果您嘗試對靜態方法進行同步-它將使用不同的鎖:

static synchronized method() { // used Class lock ! not object lock
} 

暫無
暫無

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

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