如果你想防止同时执行你的 block 和 method isRunning(),你不能完全按照你的意愿去做,因为synchronization不能被继承(只有一个实现可以证明synchronization)。
这是您可以做的最近的事情:
class A {
  protected Object lock = new Object();
  protected abstract int isRunning();
  public void concreteMethod() {
    synchronized(lock) {
       //do stuff
    }
  }
}
class B extends A {
  int running_ = 0;    
  public int isRunning() {
    synchronized(lock) {
     return running_;
    }
  }
}
如果您有能力锁定整个concreteMethod()块而不仅仅是一个块,您可以使用简单的解决方案将synchronized关键字添加到concreteMethodand isRunning():
class A {
  protected abstract int isRunning();
  public synchronized void concreteMethod() {
       //do stuff
  }
}
class B extends A {
  int running_ = 0;    
  public synchronized int isRunning() {
     return running_;
  }
}