問題タブ [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.

0 投票する
3 に答える
59686 参照

java - Completable の将来のスレッドが終了するまで待機するための推奨される方法は何ですか

私はCompletableFutureコードで以下に示すように使用しています。しかし、すべてのランナブルが終了するまで待つ方法については、2 つの方法を見つけましたが、それらの違いがわかりません。どちらがベスト プラクティスですか? それらは次のとおりです。

コード:

すべてのランナブルが終了するまで待機する最初のアプローチ:

すべてのランナブルが終了するまで待機する 2 番目のアプローチ:

どちらがオススメか教えてください。

0 投票する
2 に答える
474 参照

java - リソースへの同時アクセスを回避するには?

以下のコードに示すように、CompletableFuture を使用して 4 つのスレッドを非同期で実行しています。それらはすべて「grownSeedXYList」にアクセスする必要があります。コードを実行するとエラーが発生しないことがありますが、「java.util.concurrent.completionexception」が発生することがあります。これは、「grownSeedXYList」が同期されていないためだと思います。

「grownSeedXYList」を同期する方法を教えてください。

更新:

Compltable future を使用して実行される 4 つのスレッド

GrowSeedSERun クラス:

growSeedsSE :

0 投票する
0 に答える
441 参照

java - MPSC キュー: CompletableFutures のリストをきれいに処理する

ブロッキング キューにキューイングされているタスクのリストを非同期的に実装しようとしています。単一のスレッドによってバッチごとに消費され、各タスクの完了を報告する BlockingQueue。

たとえば。1) Web 要求はList<Task>、BlockingQueue のキューに入れられる を生成します。これは、単一のスレッド化されたコンシューマーによってバッチで消費されます。2) その要求のタスクが完了するまで、Web 要求をブロックします。3) そのリクエストのすべてのタスクがシングル スレッド コンシューマーによって完了したときに、webrequest に通知します。

Map.Entry<CompletableFuture<Task>,Task>をキューにプッシュし、処理されたタスクに対応するをcomplete()通知することを考えました。CompletableFuturewebrequest は基本的にすべての先物が完了するのを待ちます。

この種のユースケースを実装するためのより良い (よりクリーンな) 方法はありますか?

0 投票する
0 に答える
1543 参照

java - CompletableFuture の再利用

Java 8: CompletableFuture の決定的なガイドによると、CompletableFuture オブジェクトは 1 回しか完了できません。私がそれを発見したとき、私は単純なインターフェースを念頭に置いていました:

waitFor()別のスレッドが呼び出すまで待機するように、スレッドが呼び出すことができるようにする目的でcomplete()

どうやらそれはそのようには機能しません。このようなサイクルが最初に発生したときは問題なく動作しますが、2 回目は正常に動作します。まったく別のクラスでは待機せずcomplete()、CompletableFuture クラスのメソッドは false を返します。

それで、一度しか完了できないので、新しいインスタンスを作成して「リセット」してみませんか?とにかく値を一度だけ使用します。それはうまくいきません。実際、それは完全に壊れます。新しいインスタンスを作成しようとすると、プログラムがデッドロック状態になります!

この記事では、未来を完成させずに価値を伝える方法についても触れています ( obtrudeValue())。これを試してみましたが、方法と同じ結果になりcomplete()ます。

これを防ぐためにできること、または必要な機能を持つ代替手段はありますか?

0 投票する
2 に答える
260 参照

java - サプライヤーからの戻り値を FutureList に追加する方法

非同期サプライヤーを使用して以下に投稿された 3 つのメソッドを実行したいCompletableFutureので、Executor が終了したときにFuturelist、3 つのメソッドからそれぞれ返された 3 つの値が含まれている必要があります。Futurelistたとえば、の使用方法を知っています。

しかし、私の場合、次のようなものが必要です:

どうすればそれができるか教えてください。

メソッド:

compStabilityMeasure メソッドの実装:

0 投票する
1 に答える
619 参照

java - CompletableFutures チェーンを壊す

CompletableFuture次のように実行中のブロックをチェーンできます。

私の関数は 2 つのブロックでそのようなものを返すCompletableFutureので、ユーザーは必要に応じてさらに連鎖を続けることができます。

ユーザーはこれを次のように使用できます。

メソッドにハンドラーを追加したい.exceptionaly()(ユーザーには見えないようにするため) が、ブロックのいずれかが失敗した場合に、チェーンと可能なユーザー チェーンを切断できるハンドラーです。言い換えると、block1またはが失敗した場合、の戻り値にチェーンblock2できる可能性のあるユーザー ブロック ( ) を続行したくありません。block3foo

おまけの質問: CompletableFutureJava の世界よりも優れたものはありますか?