假设我有
class myClass {
synchronized methodA { };
synchronized methodB { };
}这是否意味着有2个隐式锁?一个给methodA,一个给B?我读到了Gayle McDowell的Cracking the Coding Interview,她说锁定发生在方法+对象的级别,而不是对象。我的印象是myClass只有一个锁,每个同步的方法都使用这个锁。有谁能解释一下吗?
发布于 2014-10-28 23:36:23
这
synchronized void methodA
{
//code
}等同于
void methodA
{
synchronized(this)
{
//code
}
}因此,方法前面的synchronized将使用对象本身的实例作为锁。
发布于 2014-10-29 01:38:54
这两种方法都使用相同的锁。java中的每个对象都有自己的内部互斥锁。
synchronized void method() {}和
synchronized(this) {}使用相同的锁。
但是如果你在静态方法上尝试同步-它将使用不同的锁:
static synchronized method() { // used Class lock ! not object lock
} https://stackoverflow.com/questions/26612333
复制相似问题