「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{
}
}
というふうにしてみた。
下記のようにしてみた。
/**
* 「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{
}
}
というふうにしてみた。
: