問題タブ [completable-future]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Completable の将来のスレッドが終了するまで待機するための推奨される方法は何ですか
私はCompletableFuture
コードで以下に示すように使用しています。しかし、すべてのランナブルが終了するまで待つ方法については、2 つの方法を見つけましたが、それらの違いがわかりません。どちらがベスト プラクティスですか? それらは次のとおりです。
コード:
すべてのランナブルが終了するまで待機する最初のアプローチ:
すべてのランナブルが終了するまで待機する 2 番目のアプローチ:
どちらがオススメか教えてください。
java - リソースへの同時アクセスを回避するには?
以下のコードに示すように、CompletableFuture を使用して 4 つのスレッドを非同期で実行しています。それらはすべて「grownSeedXYList」にアクセスする必要があります。コードを実行するとエラーが発生しないことがありますが、「java.util.concurrent.completionexception」が発生することがあります。これは、「grownSeedXYList」が同期されていないためだと思います。
「grownSeedXYList」を同期する方法を教えてください。
更新:
Compltable future を使用して実行される 4 つのスレッド
GrowSeedSERun クラス:
growSeedsSE :
java - MPSC キュー: CompletableFutures のリストをきれいに処理する
ブロッキング キューにキューイングされているタスクのリストを非同期的に実装しようとしています。単一のスレッドによってバッチごとに消費され、各タスクの完了を報告する BlockingQueue。
たとえば。1) Web 要求はList<Task>
、BlockingQueue のキューに入れられる を生成します。これは、単一のスレッド化されたコンシューマーによってバッチで消費されます。2) その要求のタスクが完了するまで、Web 要求をブロックします。3) そのリクエストのすべてのタスクがシングル スレッド コンシューマーによって完了したときに、webrequest に通知します。
Map.Entry<CompletableFuture<Task>,Task>
をキューにプッシュし、処理されたタスクに対応するをcomplete()
通知することを考えました。CompletableFuture
webrequest は基本的にすべての先物が完了するのを待ちます。
この種のユースケースを実装するためのより良い (よりクリーンな) 方法はありますか?
java - CompletableFuture の再利用
Java 8: CompletableFuture の決定的なガイドによると、CompletableFuture オブジェクトは 1 回しか完了できません。私がそれを発見したとき、私は単純なインターフェースを念頭に置いていました:
waitFor()
別のスレッドが呼び出すまで待機するように、スレッドが呼び出すことができるようにする目的でcomplete()
。
どうやらそれはそのようには機能しません。このようなサイクルが最初に発生したときは問題なく動作しますが、2 回目は正常に動作します。まったく別のクラスでは待機せずcomplete()
、CompletableFuture クラスのメソッドは false を返します。
それで、一度しか完了できないので、新しいインスタンスを作成して「リセット」してみませんか?とにかく値を一度だけ使用します。それはうまくいきません。実際、それは完全に壊れます。新しいインスタンスを作成しようとすると、プログラムがデッドロック状態になります!
この記事では、未来を完成させずに価値を伝える方法についても触れています ( obtrudeValue()
)。これを試してみましたが、方法と同じ結果になりcomplete()
ます。
これを防ぐためにできること、または必要な機能を持つ代替手段はありますか?
java - サプライヤーからの戻り値を FutureList に追加する方法
非同期サプライヤーを使用して以下に投稿された 3 つのメソッドを実行したいCompletableFuture
ので、Executor が終了したときにFuturelist
、3 つのメソッドからそれぞれ返された 3 つの値が含まれている必要があります。Futurelist
たとえば、の使用方法を知っています。
しかし、私の場合、次のようなものが必要です:
どうすればそれができるか教えてください。
メソッド:
compStabilityMeasure メソッドの実装:
java - CompletableFutures チェーンを壊す
CompletableFuture
次のように実行中のブロックをチェーンできます。
私の関数は 2 つのブロックでそのようなものを返すCompletableFuture
ので、ユーザーは必要に応じてさらに連鎖を続けることができます。
ユーザーはこれを次のように使用できます。
メソッドにハンドラーを追加したい.exceptionaly()
(ユーザーには見えないようにするため) が、ブロックのいずれかが失敗した場合に、チェーンと可能なユーザー チェーンを切断できるハンドラーです。言い換えると、block1
またはが失敗した場合、の戻り値にチェーンblock2
できる可能性のあるユーザー ブロック ( ) を続行したくありません。block3
foo
おまけの質問: CompletableFuture
Java の世界よりも優れたものはありますか?