2014-10-28 42 views
0

假設我有同步方法是否擁有自己的鎖?

class myClass { 

    synchronized methodA { }; 

    synchronized methodB { }; 
} 

這是否意味着有2把隱含的鎖?一個用於methodA和一個用於B?我正在閱讀Gayle McDowell的破解編碼採訪,她說鎖定發生在方法+對象的層面,而不是對象。我的印象是myClass只有一個鎖,每個同步方法都使用它。誰能解釋一下?

+0

鎖,而不是方法本身 – Jimmy 2014-10-28 15:39:13

回答

4

synchronized void methodA 
{ 
    //code 
} 

相當於

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

} 

所以,​​在一個方法將使用對象本身的實例作爲鎖的前面。

0

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

synchronized void method() {} 

synchronized(this) {} 

使用相同的鎖。

但是,如果你嘗試靜態方法同步 - 它會用不同的鎖:在對象上獲得

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