あなたは、App Engineの中で「未来」とは何をするために使うのでしょうか?
-
23-09-2019 - |
質問
ドキュメントでに、FutureWrapperのは次のように定義されています:
FutureWrapperのは、単純な未来であります 親の未来をラップします。
将来何、なぜあなたはそれをラップする必要があるだろうとあなたはApp Engineの中でそれを使用する際に?
解決
これは java.util.concurrent.Future<V>
のです。リンクJavadocはかなり明確であり、例が含まれています。怠け者のために、ここにコピー - ペーストです。
A
Future
ANの結果を表します 非同期計算。方法があります 計算かどうかを確認するために提供 そのために待機するように、完全です 結果を取得するために完了し、 計算の。結果缶 唯一の方法get
を使用して取得すること 計算が完了したとき、 必要であれば、それはあるまでブロック 準備が整いました。キャンセルがで行われます メソッドをキャンセルします。さらなる方法 タスクかどうかを判断するために設けられています 正常に完了またはキャンセルされました。 計算が完了すると、 計算はキャンセルできません。もし あなたはのためFuture
を使用したいです cancellabilityのためではなく、提供 使用可能な結果は、あなたは型を宣言することができます フォームFuture<?>
とリターンnull
の 基本となるタスクの結果としてます。のサンプル使用する(注:以下のもの クラスはすべて作らアップされている。)
interface ArchiveSearcher { String search(String target); } class App { ExecutorService executor = ... ArchiveSearcher searcher = ... void showSearch(final String target) throws InterruptedException { Future<String> future = executor.submit(new Callable<String>() { public String call() { return searcher.search(target); }}); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } } }
FutureTask
のクラスあります そのFuture
の実装 道具はRunnable
、とそうかもしれExecutor
によって実行されます。例えば、 提出して上記構成 置き換えることができます:FutureTask<String> future = new FutureTask<String>(new Callable<String>() { public String call() { return searcher.search(target); }}); executor.execute(future);
メモリー整合性効果:アクション 非同期計算で撮影しました 起こる-前にアクション 別の対応する
Future.get()
糸ます。
FutureWrapper
は、任意の親Future
のためだけデコレータです。