プログラマメモ2 - programmer no memo2

「Thread-Per-Message」パターンを利用して、処理結果を受け取ることができるようにしたサンプル 2006/06/21
2006/11/26

おそらくそんなにまちがってないとは思う。

下記のようにしてみた。





/**

* 「Thread-Per-Message」パターンを利用して、処理結果を受け取ることができるようにしたサンプル。

*

* @author S.Nakawaka

*/

public class ThreadSample {



public static void main(String[] args) throws InterruptedException {

work();

}



public static void ok(String s) {

System.out.println("@_@!:" + s);

}



public static void work() throws InterruptedException {



/*

* executeを実装

*/

final ICommand command = new ICommand(){



ICommand.Handler handler;



public void execute() {

try {

// 時間がかかる処理をシュミレート

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

handler.setValue("done!!");

}

public void setHandler(Handler handler) {

this.handler = handler;

}

};



/*

* 結果を受信するためのクラスを定義

*/

ICommand.Handler handler = new ICommand.Handler() {

public void setValue(String s) {

ok(s);

}

};



// ハンドラをセット

command.setHandler(handler);

new Thread(new Runnable() {

public void run() {

command.execute();

}

}).start();

System.out.println("*** go");

}



/**

*

* @author S.Nakawaka

*/

interface ICommand {

public void execute();

public void setHandler(Handler handler);

interface Handler {

public void setValue(String s);

}

}

}







インターフェイス使うことにより、匿名クラスでクラスの定義を行えるようにしてみた。

ハンドラーはそれを使うクラスに結びつけることを強調するために



interface aaaa{

interface bbbb{



}

}



というふうにしてみた。

: