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