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