Java 用相同的基类锁定不同的类

Java 用相同的基类锁定不同的类,java,Java,在应用程序中,我有从抽象类扩展而来的不同处理程序,如: public abstract class AbstractHandler { public void methodA() { } public void methodB() { } } public class FooHandler extends AbstractHandler { } public class BarHandler extends AbstractHandler { } 现在我必

在应用程序中,我有从抽象类扩展而来的不同处理程序,如:

public abstract class AbstractHandler {
    public void methodA() {
    }

    public void methodB() {
    }
}

public class FooHandler extends AbstractHandler {
}

public class BarHandler extends AbstractHandler {
}
现在我必须使Foo-/BarHandler的实例彼此同步

第一个想法是在以下两者之间添加一个LockingHandler类:

public abstract class LockingHandler extends AbstractHandler {
    private static final Object LOCK = new Object();

    public void methodA() {
        synchronized ( LOCK )
        {
            super.methodA();
        }
    }

    public void methodB() {
        synchronized ( LOCK )
        {
            super.methodB();
        }
    }
}
以及从LockingHandler扩展Foo-/BarHandler:

public class FooHandler extends LockingHandler {
}

public class BarHandler extends LockingHandler {
}

这是一个可行的解决方案,还是应该将锁变量放入AbstractHandler中(不使用额外的LockingHandler类,我认为如果其他类也使用AbstractHandler而不需要相同的锁定上下文)?

这不是一个可行的解决方案,因为锁是静态的。这意味着所有实例都将共享一个锁,我认为这不是您想要的。如果您想要两个对象共享同一个锁,请将其传递给构造函数。@Kuhar:是的,所有实例都应该锁定在同一个锁对象上