假設我有同步方法是否擁有自己的鎖?
class myClass {
synchronized methodA { };
synchronized methodB { };
}
這是否意味着有2把隱含的鎖?一個用於methodA和一個用於B?我正在閱讀Gayle McDowell的破解編碼採訪,她說鎖定發生在方法+對象的層面,而不是對象。我的印象是myClass只有一個鎖,每個同步方法都使用它。誰能解釋一下?
假設我有同步方法是否擁有自己的鎖?
class myClass {
synchronized methodA { };
synchronized methodB { };
}
這是否意味着有2把隱含的鎖?一個用於methodA和一個用於B?我正在閱讀Gayle McDowell的破解編碼採訪,她說鎖定發生在方法+對象的層面,而不是對象。我的印象是myClass只有一個鎖,每個同步方法都使用它。誰能解釋一下?
這
synchronized void methodA
{
//code
}
相當於
void methodA
{
synchronized(this)
{
//code
}
}
所以,在一個方法將使用對象本身的實例作爲鎖的前面。
這兩種方法都使用相同的鎖。 java中的每個對象都有其內部互斥鎖。
synchronized void method() {}
和
synchronized(this) {}
使用相同的鎖。
但是,如果你嘗試靜態方法同步 - 它會用不同的鎖:在對象上獲得
static synchronized method() { // used Class lock ! not object lock
}
鎖,而不是方法本身 – Jimmy 2014-10-28 15:39:13