繁体   English   中英

同步方法是否具有自己的锁?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM