如果线程T1通过获取类级别锁进入方法m1,这是否意味着另一个线程T2无法通过获取对象级别锁来运行其他方法m2?
最佳答案
不,这并不意味着。 “类级别锁”只是对另一个对象SomeClass.class
的常规锁。 “对象级别锁定”锁定在this
上。
编辑:为了确保我对您的术语有所了解,您想知道m1和m2是否可以按以下定义同时运行:
public class SomeClass {
public synchronized static void m1() {
//do something
}
public synchronized void m2() {
//do something
}
}
答案是肯定的,m1和m2可以同时运行。它在功能上等效于此:
public class SomeClass {
public static void m1() {
synchronized (SomeClass.class) {
//do something
}
}
public void m2() {
synchronized (this) {
//do something
}
}
}
由于它们在完全不同的对象上进行同步,因此它们不是互斥的。