問題タブ [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 - Java Future と無限計算
(無限の) 計算アルゴリズムを最適化しようとしています。
計算する無限の Sum があります ( Summ_{n-> infinity} (....) ) 私の考えは、 Future < > 構造を使用して複数のスレッドを作成し、中間結果を結合することでした。私の問題は、ある程度の精度が必要だということです。したがって、他のスレッドが計算を続けている間、常に現在の結果を計算する必要があります。
私の質問は次のとおりです。終了した各スレッドがその結果を入れることができる何らかの結果キューがありますか?
どんな助けでも本当に感謝します! ありがとう!
java - Java マルチスレッド アプリ - Futures オブジェクトを動的にキャンセルする方法
これはマルチスレッド Java アプリケーションの一般的なシナリオだと思うので、ここで説明します。
私の Java アプリには、 5 つのスレッドのプールを定義するthreadExecutorオブジェクトがあります。
sendCallablesメソッドは、ジョブのリストを Executor に割り当てる責任があります。ObjectXを使用してListを
追跡します。このようにして、ユーザーがスレッドを中断/キャンセルしたい場合に、Future のリストを参照することができます。このようなもの:
ここまでは順調ですね。
提出されたタスクを実行する必要がなくなった場合があります。
このような状況では、タスクをキャンセルする決定は、アプリケーションによってインテリジェントに/自動的に行われる必要があります。
このようなケースの例は、ユーザーのセッションが期限切れになったとき、またはすべてのジョブが実行される前に特定のフロー (送信されたタスクに関連する) が終了したときの Web アプリケーションで見つけることができます。
したがって、基本的に、アプリケーションがジョブを実行し続ける意味がない場合は、毎回 cancelFutures(referenceObj) を呼び出す必要があります。アプリケーションがそれを呼び出す必要がある場合は、それぞれの状況を特定する必要があります。
これを行うためのより良いアプローチがあるかどうか疑問に思っています。
アプリケーションによって referenceObj が参照されなくなったら、 WeakHashMapでマップをクリーンアップできるように考えていましたが、まだ .cancel() を呼び出す必要があるため、Future の実行を停止しません (一種のWeakHashMap remove(Object) メソッドに関連付けられた eventHandler ? )
java - java.util.concurrent.Future.get()が返されない
私は次のJavaコードを持っています:
exeService
のインスタンスはどこですか
問題は、myObject.doSomething()
二度と戻らないことです。したがって、future.get()
二度と戻らないということです。
submit
ただし、への呼び出しを次のような呼び出しに置き換えると、execute
次のようになります。
の呼び出しmyObject.doSomething()
は戻ります。それが重要かどうかはわかりませんdoSomething()
が、void
方法です。
使用時に終了するのに、使用しないときにdoSomething()
終了するのはなぜですか?execute
submit
また、使用する必要はありませんFuture.get()
; それがこれを行う最も自然な方法のように思えました。(私も同じ問題に遭遇しCountdownLatch
ます。)要点は、先に進む前に終了するのを待つ必要があるということです。doSomething()
複雑な理由から、ここでは説明しません。別のスレッドで起動する必要があります。これを行う別の方法が機能する場合は、それで問題ありません。
java - CompletionService.take()。isDone()は常にtrueですか?
それを仮定するのは安全ですか
常にtrueを返しますか?もしそうなら、なぜtake()は値を直接返すのではなく、Futureを返すのですか?そうでない場合、ドキュメントで使用されている「完了したタスク」とはどういう意味ですか?
java - Future.get()はどのような場合にExecutionExceptionまたはInterruptedExceptionをスローしますか
私のコードスニペット:
InterruptedException
コード内でとをどのように処理する必要がExecutionException
ありますか?
そして、どのような場合に、これらの例外がスローされますか?
java - 将来/スレッドを理解する
初めて先物を使おうとしています。ジョブをキャンセルできるのは賢いようですが、期待どおりに機能していません。以下の例では、最初のジョブのみがキャンセルされます。残りは完了です。先物の使い方を誤解していませんか?
出力:
c++11 - c++0xの先物に関する問題
先物がc++0xでどのように機能するかを理解するために、小さなプログラムを作成しました。コードの実行中に、「エラー:'printEn'はこのスコープで宣言されていません」のようなエラーが発生します。私は問題が何であるかを理解することができません..ここで私が間違っていることを親切に指摘し、可能であれば同じための正しいコードを書いてください..
編集 :
プログラムの実行中にprintFnに変更を加えた後、「バージョン `GLIBCXX_3.4.14'が見つかりません(./a.outで必要)」というエラーメッセージが表示されます。これは何を示していますか?
java - java.util.concurrent.Future に矛盾がありますか?
Future
議論のために、キャンセルできないタスクを実装しているとしましょう。Java 6 API docは次のように述べています。
[
cancel()
] が返された後、後続の への呼び出しisDone()
は常に を返しtrue
ます。[ ] は、通常、タスクが既に正常に完了しているため、タスクをキャンセルできなかった場合に
cancel()
返されますfalse
また、次のようにも述べています。
[ ] は、このタスクが完了した場合
isDone()
に返されます。true
しかし、タスクが既に完了しているからではなく、単にキャンセルできないためにキャンセルが失敗した場合はどうなるでしょうか? この矛盾から抜け出す方法はありますか (キャンセルできないタスクをキャンセル可能にし、それを完全に回避する以外に)?
scala - forkjoinpool にスレッドを追加するにはどうすればよいですか
私は最近、Scala フューチャの実験に成功しました。並列処理によって得られた利益には非常に満足していますが、ワーカー スレッドは 4 つしかありません。
どうすればスレッド数を 11 に増やすことができるかをずっと探していましたが、うまくいきませんでした。これどうやってするの?
java - Java Futures が「提出される」注文を制御する方法は?
この例では、いくつかのファイルをコンパレータ オブジェクトに送信しています。ファイルが送信される順序が常に同じ順序で返されるとは限らないことに気付いたことを除いて、すべて正常に動作します。これをより適切に制御する方法について何か提案はありますか?