【发布时间】:2019-12-31 05:55:37
【问题描述】:
在下面的代码 sn-p 中,我有一个问题。 线程将获得类级锁或对象级锁?
private static Object lock=new Object();
private static Object lock2=new Object();
public static void m1(){
synchronized(lock){
//statements
}
}
public static void m2(){
synchronized(lock2){
//statements
}
}
【问题讨论】:
-
您已获得
lock对象的锁定。所以它将锁定该对象而不是类级别 -
感谢 Ashish,我很困惑,无论是 Object 类被锁定还是 Object 的对象在静态方法中被锁定,线程需要类级锁定
-
只有当静态方法本身是同步的或者你使用了
synchronized (EnclosingClass.class) { ... }时,它才会使用封闭类的Class对象。 -
@Slaw 所以这是我的一个疑问,对象与静态上下文无关,然后线程将获取对象上的锁定,或者在我的示例中,它将锁定在“锁定”变量上而不是对象上跨度>
-
@Mohdshaban - 请参阅下面的答案。也许它会帮助你消除疑虑
标签: java multithreading synchronized