問題タブ [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 - CompletableFuture は、タスクが独立していることをどのように認識していますか?
次のダミー コードがあるとします。
この場合、 JVM はそれを認識し、独立したスレッドを実行しますかcf1
? cf2
また、スレッドが依存する場合 (たとえば、データベースへの接続を 1 つ使用する場合) はどうなりますか?
より一般的には、どのようにCompletableFuture
スレッドを同期しますか?
java - CompletableFuture allOf に渡された完成した先物にどのようにアクセスしますか?
Java 8 CompletableFuture を把握しようとしています。これらを人に結合して「allOf」の後に返すにはどうすればよいですか。以下のコードは機能していませんが、私が試したことのアイデアが得られます。
JavaScript ES6では、私はそうします
これまでの Java での取り組み
java - CompletableFuture の別のセットが完成したときに CompletableFuture を完成させるにはどうすればよいですか?
10 個の完了可能な先物 (futureN) を作成する完了可能な先物 (future1) があります。すべての futureN が完了した場合にのみ、future1 を完了として設定する方法はありますか?
java - CompletableFuture を返すまたは CompletableFuture ?
を返す非同期メソッドを書きたいと思いますCompletableFuture
。future の唯一の目的は、結果ではなく、メソッドがいつ完了するかを追跡することです。戻った方がいいですかCompletableFuture<Void>
、それともCompletableFuture<?>
?どちらか一方を好む理由はありますか、それとも交換可能ですか?
CompletableFuture
それ自体はCompletableFuture<Void>
、そのメソッドの多くから戻ります。java.nio
に:Future<Void>
があります。AsynchronousSocketChannel
Future<Void> connect(SocketAddress remote)
- 一方、
java.util.concurrent
クラス likeExecutorService
およびScheduledExecutorService
returnFuture<?>
: たとえば withFuture<?> submit(Runnable task)
.
パラメーター リスト、変数宣言、またはその他のコンテキストではなく、戻り値の型についてのみ質問していることに注意してください。
java - CompletableFuture、可変オブジェクト、およびメモリの可視性
CompletableFuture
Java 8 がJava メモリ モデルとどのように相互作用するかを理解しようとしています。プログラマーの正気のために、理想的には次のことが当てはまるように思えます。
完了に依存するステージが実行されるCompletableFuture
前に発生するスレッド内のアクション完了を登録するスレッド内のアクションは、完了依存ステージが実行される前に発生する依存ステージを作成します
java.util.concurrent のドキュメントには、次のようなメモがあります。
への送信前のスレッド内のアクションは、その実行が開始される前に発生
Runnable
します。に提出されたについても同様です。Executor
Callable
ExecutorService
これは、future を完了するスレッドが完了依存ステージを実行するか、Executor
. 一方、CompletableFuture のドキュメントを読んだ後、私はそれについてよくわかりません:
非非同期メソッドの依存完了のために提供されるアクションは、現在の を完了するスレッド
CompletableFuture
、または完了メソッドの他の呼び出し元によって実行される場合があります。
それは私の質問に私をもたらします:
- 上記の 2 つの仮定上の特性は正しいですか?
- で作業するときのメモリ可視性の保証の有無について、特定のドキュメントはどこかにあり
CompletableFuture
ますか?
補遺:
具体的な例として、次のコードを検討してください。
"foo"
への追加list1
がラムダ関数に表示されることが保証されていますか? list1
への追加list2
が の依存ステージに表示されることが保証されていfuture
ますか?
grails - 非同期呼び出しにより応答時間が短縮されることを証明する Grails アプリの指標
私は現在、grails 2.4.2で実行されているgrailsアプリを持っています.
私の目標は、このコードを非同期にリファクタリングすることです。これは、上記のコード スニペットが「ブロッキング」get 関数をすぐに呼び出して非同期プログラミングを使用する目的を無効にしているように見えるためです。次のオプションを検討しています
私の質問は、どのオプションを検討するかということではありませんが、メトリックを測定して、非ブロッキング呼び出しを使用すると、grails Web アプリケーションにアクセスするユーザーにより良い応答時間が提供されることを示す簡単で簡単な方法があります。
java - CompletableFuture.supplyAsync を PriorityBlockingQueue と一緒に使用するにはどうすればよいですか?
CompletableFuture.supplyAsync を介して LinkedBlockingQueue で ThreadPoolExecutor を使用する既存のアプリケーションにプライオリティ キューを追加しようとしています。問題は、PriorityBlockingQueue の Comparator でアクセスできるタスクの優先度を割り当てる設計を思いつかないことです。これは、私のタスクが CompletableFuture によって AsyncSupply という名前のプライベート 内部クラスのインスタンスにラップされ、元のタスクがプライベート フィールドに隠されるためです。Comparator は、次のように Runnables としてキャストされたこれらの AsyncSupply オブジェクトで呼び出されます。
CompletableFuture を拡張して別のオブジェクトにラップできるようにする可能性を調査しましたが、CompletableFuture の多くはカプセル化されていて継承できません。したがって、それを拡張することはオプションのようには見えません。非常に幅広いインターフェイスを実装しているため、アダプター内にカプセル化することもできません。
CompletableFuture全体をコピーして変更する以外に、この問題に対処する方法がわかりません。何か案は?
java - API を定義するときに CompletableFuture または Future を返す必要がありますか?
CompletableFuture
Java 8 では、インターフェイスまたは抽象クラスは、返す代わりに返すAPI を定義する方が良いFuture
ですか? への変換が醜いことFuture
CompletableFuture
と、呼び出し元が関数型スタイルを直接使用する柔軟性を高めるという事実を考慮するCompletableFuture
と、API が単に を返す正当な理由は何Future
でしょうか?