Java 来自不同类的同步语句

Java 来自不同类的同步语句,java,synchronization,Java,Synchronization,我有两个类B和C来实现接口A。在这两个类中都存在一个方法,其中一个语句需要同步。我有这个: class B implements A { @Override public void method(){ //some code here synchronized (this.getClass()) { //some code here }

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

    class B implements A {
         @Override
         public void method(){
           //some code here
           synchronized (this.getClass()) {
             //some code here
           }    
        }
    }



        class C implements A {
             @Override
             public void method(){
               //some code here
               synchronized (this.getClass()) {
                 //some code here
               }    
            }
        }   

我需要同步这两个类中的语句,但是使用this.getClass返回不同的类,它可以同时执行。我如何从不同的类同步这两条语句,使它在同一时间只执行一次

在另一个对象上同步,
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
       }    
    }
}

需要同步它们的最可能原因是,它们将访问一些公共对象。如果是,请在该对象上同步

如果不是,并且控制接口A,则可以添加:

public static final Object LOCK = new Object();

并让它们在.LOCK上同步。

java中的Synchronized块在某些对象上是同步的。在同一对象引用上同步的同步块一次只允许1个线程。其他的将被阻止,直到它离开。因此,对这两种方法使用相同的对象引用。

您可以在
a
中声明共享监视器对象,例如:

静态最终对象监视器=新对象()


然后在
B
C
中使用
synchronized(MONITOR)
,您可以轻松地修改代码,而无需引入新的类/变量来执行您想要的操作(假设您要同步a的所有实现):


然而,这不是一个好的解决方案。正确的方法是使用锁。

两个实例都需要对同一对象的引用才能锁定。谢谢!我也这样做了,但是在类A中,所以避免创建另一个类。
synchronized (A.class) {
    // do something
}