rこれは、インスタンスはインスタンス化子とどのように通信できますか? からのフォローアップの質問です。
次のような場合、メソッド signal() が B の 2 つのインスタンスによって同時に呼び出されると、すべての B が reset() を 2 回呼び出すという競合が発生します。解決するにはどうすればよいですか?
すべての B がリセットを完了した場合にのみ、リセットを引き起こすイベントが発生した場合、リセットしても問題ありません。
public class A {
private B b[];
public A() {
//for loop
b[i] = new B(this);
}
public void signal() {
//tells every B to reset.
//for loop
b[i].reset();
}
}
public class B {
A creator;
public B(A creator) {
this.creator = creator;
}
public void reset() {
//very critical operation that should not happen back to back
}
public void main(String[] args) {
while(true)
if(isBad()==true) {
//Something bad happen. Tell A to reset everyone.
creator.signal();
}
}
}