假设我有
class myClass {
synchronized methodA { };
synchronized methodB { };
}
这是否意味着有2个隐式锁?一个用于方法A,一个用于B?我正在阅读Gayle McDowell的Cracking the Coding Interview,她说锁定发生在方法+对象的层面,而不是对象。我的印象是myClass只有一个锁,每个synchronized方法都使用它。谁能解释一下?
答案 0 :(得分:4)
此
synchronized void methodA
{
//code
}
相当于
void methodA
{
synchronized(this)
{
//code
}
}
因此,方法前面的synchronized
将使用对象本身的实例作为锁。
答案 1 :(得分:0)
这两种方法都使用相同的锁。 java中的每个对象都有他的内部互斥锁。
synchronized void method() {}
和
synchronized(this) {}
使用相同的锁。
但是如果你尝试使用静态方法同步 - 它将使用不同的锁:
static synchronized method() { // used Class lock ! not object lock
}