2005.12.14 株式会社四次元データ 宮澤了祐
マルチスレッドプログラミング 8章 java.util.concurrentパッケージ2
- 8.1. スケジューリング
- 8.2. Callableインタフェース
- 8.3. Futureインタフェース
8.2. Callableインタフェース
JDK5.0より、新たにjava.util.concurrent.Callableインタフェースが追加されました。 Runnableとは違い、値を返したり例外を投げることが出来ます。
ExecutorServiceのsubmit()メソッドにより、Callableタスクを送信します。
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.Executors;
public class MyCallableTask implements Callable<Date> {
public Date call() throws Exception {
Thread.sleep(1000);
return new Date();
}
public static void main(String[] args){
ExecutorService ex = Executors.newSingleThreadExecutor();
Future<Date> future = ex.submit(new MyCallableTask());
try {
Date date = future.get();
System.out.println(date);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
ex.shutdown();
}
}
現在の時刻を返すタスクを設定します。 ExecutorServiceのsubmit()メソッドの返り値はFutureオブジェクトです。 Futureのget()メソッドによって、指定した型で値が返って来ます。 get()メソッドは、値が返ってくるまで待機します。 次のような形で出力されれば成功です。
Tue Jul 26 21:07:01 JST 2005

