gpt4 book ai didi

java - 静态方法内的同步块(synchronized block)将获取类级锁或对象级锁

转载 作者:行者123 更新时间:2023-11-30 01:42:19 28 4
gpt4 key购买 nike

在下面的代码片段中,我有一个问题。线程将获取类级锁还是对象级锁?

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
}
}

最佳答案

每个对象都有一个“监视器”。当您使用同步块(synchronized block)时,您可以指定要在其监视器上同步的实例。除了同步 block 之外,还有同步方法。同步实例方法将获取调用该方法的实例的监视器,而同步静态方法将获取java.lang.Class的监视器 封闭类的对象。

public class Foo {

private static final Object STATIC_LOCK = new Object();
private final Object instanceLock = new Object();

public static void bar() {
synchronized (STATIC_LOCK) { // acquires monitor of "STATIC_LOCK" instance
// guarded code
}
}

public static synchronized void baz() { // acquires monitor of "Foo.class" instance
// guarded code
}

public void qux() {
synchronized (instanceLock) { // acquires monitor of "instanceLock" instance
// guarded code
}
}

public synchronized void quux() { // acquires monitor of "this" instance
// guarded code
}
}

关于java - 静态方法内的同步块(synchronized block)将获取类级锁或对象级锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59540141/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com