我正面临着关于Java方法同步的问题 . 我希望我能简单解释一下:
我在两个不同的类中有两种不同的方法,分为两个不同的包 . 就像是:
Package1
|_Class1
\MethodA
Package2
|_Class2
\MethodB
好的,现在我需要同步这两个方法,即 not threads . 到目前为止,我有两种不同的方法:
Shared semaphore .
在 Package1
和 Package2
之外创建一个共享静态信号量,类似于:
package Package3;
public class SemaphoreClass {
public static Semaphore;
}
无论如何,我真的不知道JVM是否会将此视为共享信号量 .
Synchronized (SharedClass.class) .
使用共享类来同步这两个方法,例如:
public void MethodA() {
synchronized (SharedClass.class) {
//...
}
和
public void MethodB() {
synchronized (SharedClass.class) {
//...
}
无论如何,这些只是方法 . 我想知道实现我想要实现的目标的最佳方法是什么 . 拥有JVM的共享信号量会使事情变得更容易,但是,我知道必须有一个解决方案 . 提前致谢 .
1 回答
你的两种方法都应该有效,但我不认为锁定课程是一种推荐的做法 . 首选锁定
Object
的实例,或使用java.util
中的正确锁定 . 另外,请勿锁定String
.或者,您可以让类
Class1
和Class2
的实例在实例化期间可以将锁作为参数:然后确保创建一个锁(使用
new Object()
)并将其传递给Class1
和Class2
的两个实例 .所以基本上,你已经将原来的问题分解为两个:1)这两个类没有静态地共享任何东西,它们只是接收一个参数 . 2)
Class1
和Class2
的客户端必须传递正确的锁 .Class1
和Class2
的客户端充当"orchestrator" .