同步方法有自己的锁吗?

时间:2014-10-28 15:34:36

标签: java multithreading concurrency locking

假设我有

class myClass {

    synchronized methodA { };

    synchronized methodB { };
}

这是否意味着有2个隐式锁?一个用于方法A,一个用于B?我正在阅读Gayle McDowell的Cracking the Coding Interview,她说锁定发生在方法+对象的层面,而不是对象。我的印象是myClass只有一个锁,每个synchronized方法都使用它。谁能解释一下?

2 个答案:

答案 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
}