ブロックとメソッドの同時実行を防ぎたい場合は、継承できない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
concreteMethod
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_;
}
}