パッケージT1;
輸入java.util.concurrent.Callable;
輸入java.util.concurrent.ExecutionException。
輸入java.util.concurrent.FutureTask;
輸入java.util.concurrent.TimeUnit。
クラスMyCallable実装呼び出し可能<整数> {
@Override
パブリック整数コール()例外{スロー
するSystem.out.println(「*****呼び出し可能に来ます」)。
TimeUnit.SECONDS.sleep(3)。
1000年を返します。
}
}
パブリッククラスCallableDemo {
静的な無効メインパブリック(文字列[]引数)がInterruptedExceptionある、ExecutionException {スロー
RunnableFutureに//実装クラスFutureTaskを、RunnableFutureサブRunnabledeインターフェース
//コンストラクタ引数はFutureTask呼び出し可能インタフェースです。
このようなスレッド//コンストラクタはRunnabledeサブクラスFutureTaskは呼び出し可能であっ構築するために構成された使用することができます
//これはアダプタモードである
// FutureTaskのget()メソッドは、実行の戻り値呼び出し可能なスレッドを取得し、FutureTaskを表示されます理由
//タスクを打破して、結果をマージすることである
)// FutureTaskのgetが(ブロックされます、それは一般的にエンドGET結果に配置され、また、ループしながら、スピン・ロック方式を有することができます。
A FutureTask、<整数> =新しい新しいFutureTask FutureTask、<>(新しい新しいMyCallable());
;(FutureTask).start()新しいスレッド新しい
新しい新しいスレッド(FutureTask).start(); //スレッドfutureTask複数をつかむ、行いません2、2、実行する必要がある場合には、FutureTask二つの開放が必要です
int型結果1 = 100;
計算値、完了するとしばらく(futureTask.isDoneは())//、ここにブロックされました
。
INT結果2 = futureTask.get()。
System.out.println(結果1 +結果2)。
}
}
出力:
*****呼び出し可能に来る
1100