如何确保被覆盖的方法同步

我有一类线程安全的通用代码。

该类中的一个方法是抽象的,需要针对不同的实现重写。

我需要向其他开发人员保证或至少向其他开发人员标记此方法的所有实现都需要是线程安全的。

最好的方法是什么?

是否有关键字或注释可以达到此效果?

我已经尝试过,但不允许使用关键字组合。abstract synchronized


答案 1

你不能直接做。你可以做的一件事是让方法具体,但调用一个抽象的方法:

public synchronized final void foo() {
    doFoo();
}
protected abstract void doFoo();

这样,doFoo() 将始终* 在 foo() 建立的同步下被调用。

*除非有人直接调用它,所以你应该命名并记录它,以明确他们不应该。


答案 2

子类中的同步方法

“同步”是方法的实现细节。可以使用方法重写同步方法,而无需将其声明为同步,反之亦然。重载也是如此。

您还可以查看,超类中的同步方法获取与子类中的方法相同的锁。