我正面临有关Java方法同步的问题。让我们希望我可以简单地解释它:在不同的类(和不同的包)中同步两种方法
我有两个不同的方法在两个不同的类,在两个不同的包。喜欢的东西:
Package1
|_Class1
\MethodA
Package2
|_Class2
\MethodB
好了,现在我需要这两种方法,这是不是线程同步。到目前为止,我有两种不同的方法:
共享信号量。
外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的共享信号会让事情变得更容易,但是,我知道必须有解决方案。提前致谢。
信号量解决方案是好的......但是不要忘记在'finally'块中释放它! – fge
事实上,类在不同的包中是不相关的,你可以按照同步一个类的实例的方式同步它的实例。 – SJuan76
@ SJuan76我知道这不是真的相关,所以我把它们放在“()”里面;) –