我有两个实现接口A的类B和C.在这两个类中都存在一个带有需要同步的语句的方法。我有这个:
X_test
我需要同步两个类中的语句,但是this.getClass返回不同的类,它可以同时执行。如何以不同的方式同时执行一次,从不同的类中同步这两个语句?
答案 0 :(得分:2)
需要同步它们的最可能原因是它们将访问一些常见对象。如果是,请同步该对象。
如果没有,并且如果您控制界面A,则可以添加:
public static final Object LOCK = new Object();
让它们在A.LOCK上同步。
答案 1 :(得分:1)
同步method()
的两个实现都可以访问的其他对象。
class D {
public static final Object SYNC_OBJ = new Object();
}
class B implements A {
@Override
public void method(){
//some code here
synchronized (D.SYNC_OBJ) {
//some code here
}
}
}
class C implements A {
@Override
public void method(){
//some code here
synchronized (D.SYNC_OBJ) {
//some code here
}
}
}
答案 2 :(得分:1)
您可以在A
中声明共享监视器对象,例如:
static final Object MONITOR = new Object();
然后在synchronized(MONITOR)
和B
中使用C
。
答案 3 :(得分:0)
您可以轻松修改代码,而无需引入新的类/变量来完全按照您的意愿执行(假设您要同步A的所有实现):
$('#YOUR_SELECT_ELEMENT').trigger('chosen:updated');
然而,这不是一个好的解决方案。正确的方法是使用锁。
答案 4 :(得分:-1)
java中的同步块在某些对象上同步。在同一对象引用上同步的同步块一次只允许1个线程。其他将被阻止,直到它离开。因此,对两种方法使用相同的对象引用。 https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html