Java 同步方法有自己的锁吗?
如果我有Java 同步方法有自己的锁吗?,java,multithreading,concurrency,locking,Java,Multithreading,Concurrency,Locking,如果我有 class myClass { synchronized methodA { }; synchronized methodB { }; } 这是否意味着有两个隐式锁?一个是方法A,一个是方法B?我正在阅读Gayle McDowell的编码访谈,她说锁定发生在方法+对象的层次,而不是对象。我的印象是myClass只有一个锁,每个同步方法都使用这个锁。有人能解释一下吗?这个 synchronized void methodA { //code } 相当于 vo
class myClass {
synchronized methodA { };
synchronized methodB { };
}
这是否意味着有两个隐式锁?一个是方法A,一个是方法B?我正在阅读Gayle McDowell的编码访谈,她说锁定发生在方法+对象的层次,而不是对象。我的印象是myClass只有一个锁,每个同步方法都使用这个锁。有人能解释一下吗?这个
synchronized void methodA
{
//code
}
相当于
void methodA
{
synchronized(this)
{
//code
}
}
因此,方法前面的同步将使用对象本身的实例作为锁。
synchronized void methodA
{
//code
}
相当于
void methodA
{
synchronized(this)
{
//code
}
}
因此,在一个方法前面的
synchronized
将使用对象本身的实例作为锁。这两个方法使用相同的锁。
java中的每个对象都有其内部互斥体
synchronized void method() {}
及
用同一把锁
但如果您尝试在静态方法上同步-它将使用不同的锁:
static synchronized method() { // used Class lock ! not object lock
}
这两种方法使用相同的锁。 java中的每个对象都有其内部互斥体
synchronized void method() {}
及
用同一把锁
但如果您尝试在静态方法上同步-它将使用不同的锁:
static synchronized method() { // used Class lock ! not object lock
}
锁是在对象上获得的,而不是在方法上。锁是在对象上获得的,而不是在方法本身上获得的