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