問題タブ [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.
computer-science - 先物とは?
先物とは?それは遅延評価と関係があります。
java - Future.get()およびInterruptedException非同期スレッド
アプリケーションでhttpClientを使用して非同期スレッドを使用しています。このようにFutureApiを使用して電話をかけます
この呼び出しは、Callable httpClient call()メソッドから返されたhtml文字列を取得しようとします。
ただし、私がやりたいのは、call()メソッドの実行中にgetメソッドが長時間待機しないようにすることです。rssFuture.get()を呼び出すときにタイムアウトパラメータを渡す必要がありますか、それともInterruptedExceptionキャッチブロックで囲んでも大丈夫ですか?
また、非同期スレッドがInterruptedExceptionをスローする前に待機するデフォルトの時間はありますか?その場合、カスタム値を設定できますか?
java - Spring TaskExecutors で Future/Futuretask オブジェクトを使用できますか?
Spring TaskExecutor でJava FutureTaskを使用してFutureオブジェクトを取得することは可能ですか?
Java ExecutorServiceインターフェイス、特に submit() メソッドを実装する TaskExecutor を探しています。Spring Javadocsを調べても、このようなクラスは見つかりません。私が気付いていない Spring TaskExecutors を介して先物を処理する別の方法はありますか?
可能であれば、例も含めていただけますか?
multithreading - Clojure 可変ストレージ タイプ
サイトで入手できる API とドキュメントから Clojure を学ぼうとしています。Clojure の変更可能なストレージについては少しよくわかりません。私の理解が正しいことを確認したいと思います。私が間違っているという考えがあれば教えてください。
編集:その正確性についてコメントを受け取ったので、これを更新しています。
免責事項: この情報はすべて非公式であり、間違っている可能性があります。Clojure の仕組みを理解するためにこの記事を使用しないでください。
Varsには常にルート バインディングが含まれ、場合によってはスレッドごとのバインディングも含まれます。これらは命令型言語の通常の変数に相当し、スレッド間で情報を共有するのには適していません。(アーサー・ウルフェルトに感謝)
参照は、単一のトランザクションで任意の数の参照の状態を変更できるアトミック トランザクションをサポートするスレッド間で共有される場所です。トランザクションは同期式 (dosync) の終了時にコミットされ、競合は STM マジック (ロールバック、キュー、待機など) で自動的に解決されます。
エージェントは、独立したアクション関数をディスパッチしてエージェントの状態を変更することにより、最小限のオーバーヘッドでスレッド間で情報を非同期的に共有できるようにする場所です。エージェントはすぐに返されるため、非ブロッキングですが、ディスパッチされた関数が完了するまでエージェントの値は設定されません。
アトムは、スレッド間で同期的に共有できる場所です。異なるスレッド間の安全な操作をサポートします。
これらの構造をいつ使用するかに基づいた私のわかりやすい要約は次のとおりです。
- Var は、命令型言語の通常の古い変数のようなものです。(可能な限り避けてください)
- Atom は Var に似ていますが、即時の読み取りと安全な設定を可能にするスレッド共有の安全性を備えています。(ありがとうマーティン)
- エージェントは Atom に似ていますが、ブロックするのではなく、新しいスレッドを生成してその値を計算し、値の変更中にのみブロックし、割り当てが完了したことを他のスレッドに知らせることができます。
- Ref は、トランザクションで自分自身をロックする共有の場所です。ロックされたコードのすべての部分について競合状態で何が起こるかをプログラマーに決定させる代わりに、トランザクションを開始し、Clojure にそのトランザクション内の参照間のすべてのロック状態を処理させます。
また、関連する概念として function がありますfuture
。私には、将来のオブジェクトは、計算が完了するまで値にまったくアクセスできない同期エージェントとして記述できるように思えます。ノンブロッキング Atom と表現することもできます。これらは正確な未来の概念ですか?
java - 将来のキャンセル時にCallable内でCXFWebサービス呼び出しを終了する方法
編集
この質問はこれまでに数回繰り返されてきたので、改訂を自由に調べて、歴史や試みられた事柄に関する背景情報を確認してください。
CompletionServiceをExecutorServiceおよびCallableと一緒に使用して、CXFで生成されたコードを介していくつかの異なるWebサービス上の多数の関数を同時に呼び出しています。これらのサービスはすべて、使用している単一の情報セットに対して異なる情報を提供します。私のプロジェクト。ただし、サービスは例外をスローせずに長期間応答できない可能性があり、情報の組み合わせセットの待機が長くなります。
これに対抗するために、私はすべてのサービスコールを同時に実行しています。数分後、まだ終了していないコールをすべて終了し、できれば、呼び出し可能ファイル内から、またはスローすることによって、まだ実行されていないコールをログに記録します。詳細な例外。
これは、私がすでに行っていることを説明するための非常に単純化されたコードです。
また、WS呼び出しを同時に開始するコードは次のとおりです。
このコードで私が抱えている問題は、port.getXXXFeatures(...)が戻るのを待っているときに、Callablesが実際にはキャンセルされないが、どういうわけか実行を続けることです。ステートメントからわかるように、port.getFeaturesが戻った後if (Thread.currentThread().isInterrupted()) log.error("XXX was interrupted");
に中断フラグが設定されます。これは、キャンセルを呼び出したときに中断されたのではなく、Webサービス呼び出しが正常に完了した後にのみ使用できます。
誰かが私が間違っていることと、一定期間後に実行中のCXF Webサービス呼び出しを停止し、この情報をアプリケーションに登録する方法を教えてもらえますか?
よろしく、ティム
java - マルチスレッド検索操作
クエリの配列を受け取るメソッドがあり、それらを Google や Yahoo などのさまざまな検索エンジン Web API に対して実行する必要があります。プロセスを並列化するために、クエリごとにスレッドが生成され、最後にスレッドが生成されます。これは、すべてのクエリの結果が得られた後join
にのみアプリケーションを続行できるためです。私は現在、これらの行に沿って何かを持っています:
最近、並行ジョブを実行するための新しいAPI が Java にあることを発見しました。つまり、Callable
インターフェイス、FutureTask
およびExecutorService
. この新しい API を使用する必要があるかどうか、また従来の API よりも効率的かどうかを考えていましRunnable
たThread
。.
この新しい API を調べた後、次のコード (簡易版) を思いつきました。
私はこの同時実行 API を初めて使用します。上記のコードで改善できる点があるかどうか、および最初のオプション (を使用) よりも優れているかどうかを知りたいThread
です。など、私が調べていないクラスがいくつかありますFutureTask
。その辺のアドバイスも頂ければ幸いです。
java - Java Thread - Thread.interrupted() および future.cancel(true) の奇妙な動作
TaskExecutor によって返される Futures オブジェクトのリストを管理したいと考えています。
私はこのようなものを持っています
ProcessThis は Callable< String> を実装し、Thread.interrupted() ステータスをチェックするタスクです。
ここでの問題は、Thread.interrupted() が呼び出されたときに、並行スレッドのサブセットのみが「true」を返すことです。
removeFutures() の assert は、削除されるすべてのフューチャに対して true を返します (isDone() と isCompleted() もチェックしました。
中断されるスレッドの数はランダムです。実行中のスレッドが 15 を超えると、13 が中断されることもあれば、2 .. .
どこに問題があるのか本当にわかりません. future.cancel(true) を呼び出して true が返された場合...そして Thread.interrupted をチェックすると (これは 1 回だけ呼び出されます)、これも true を返すと予想されます
何が欠けているのか分かりませんか?私
はビルド Java 1.6.0_02-b05 を使用しています
java - 未来についての良いドキュメンテーション/本
誰かがJavaのFutureインターフェースについての良いドキュメント/チュートリアル/本を提案できますか?
java - Future の進行状況を取得する機能物体
java.util.concurrent パッケージと Future インターフェースを参照すると、長いタスクを開始して進行状況を照会できる機能は、SwingWorker 実装クラスにのみ付属していることに気付きました (間違っていなければ)。
これは、次の疑問を投げかけます。
非 GUI、非 Swing アプリケーション (コンソール アプリケーションをイメージする) で、バックグラウンドで長いタスクを開始し、他のスレッドが進行状況を検査できるようにする方法はありますか? この機能をスイング/GUI アプリケーションに限定すべき理由はないように思えます。それ以外の場合、私が見る限り、使用可能な唯一のオプションは、Future オブジェクトを返す ExecutorService::submit を経由することです。ただし、基本の Future インターフェイスでは、進行状況を監視できません。
java - Java Future と無限計算
(無限の) 計算アルゴリズムを最適化しようとしています。
計算する無限の Sum があります ( Summ_{n-> infinity} (....) ) 私の考えは、 Future < > 構造を使用して複数のスレッドを作成し、中間結果を結合することでした。私の問題は、ある程度の精度が必要だということです。したがって、他のスレッドが計算を続けている間、常に現在の結果を計算する必要があります。
私の質問は次のとおりです。終了した各スレッドがその結果を入れることができる何らかの結果キューがありますか?
どんな助けでも本当に感謝します! ありがとう!