来自不同类的同步语句

时间:2015-05-28 19:07:59

标签: java synchronization

我有两个实现接口A的类B和C.在这两个类中都存在一个带有需要同步的语句的方法。我有这个:

X_test

我需要同步两个类中的语句,但是this.getClass返回不同的类,它可以同时执行。如何以不同的方式同时执行一次,从不同的类中同步这两个语句?

5 个答案:

答案 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