リスナー インターフェイスを使用して、実行中の Thread の複数のインスタンスから情報を取得したいオブジェクト Foo があるとします。例えば
インターフェース:
public interface ThreadListener {
public void onNewData(String blabla);
}
クラス Foo:
public class Foo implements ThreadListener {
public Foo() {
FooThread th1 = new FooThread();
FooThread th2 = new FooThread();
...
th1.addListener(this);
th2.addListener(this);
...
th1.start();
th2.start();
...
}
@Override
public void onNewData(String blabla) {
...
}
}
スレッド:
public FooThread extends Thread {
private ThreadListener listener = null;
public void addListener(ThreadListener listener) {
this.listener = listener;
}
private void informListener() {
if (listener != null) {
listener.onNewData("Hello from " + this.getName());
}
}
@Override
public void run() {
super.run();
while(true) {
informListener();
}
}
}
最悪の場合、onNewData(..) が複数のスレッドによって同時に呼び出されます。フーはどうなるの?クラッシュするかどうか?