gpt4 book ai didi

java - 调用锁中的调用顺序,分两种情况

转载 作者:行者123 更新时间:2023-12-01 14:32:38 25 4
gpt4 key购买 nike

我有一个包含同步方法的类:

class A {
synchronized void method1() {};
synchronized void method2() {};
}

如果某个客户端类想要调用 method1(),则 method2() 知道这些调用是原子的

第一种情况:

class B {    
A a;
public void foo() {
synchronized(a) {
a.method1();
a.method2();
}
}

}

第二种情况:

 class B {    
A a;

final Object lock = new Object();

public void foo() {
synchronized(lock) {
a.method1();
a.method2();
}
}

}

有什么理由让我应该使用一种情况而不是另一种情况?

最佳答案

在 a 上同步可能是最有意义的。这至少维持了“最少意外”的原则。 a 也是其他客户端同步的最自然的对象。添加一些文档以使其更加清晰。另外,您可以保证获得 A 中同步方法的锁,如果您在 A 和 B 中使用不同的锁,这可能比潜在竞争锁定稍微更有效。

关于java - 调用锁中的调用顺序,分两种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16742474/

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