問題タブ [futuretask]
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 - Executor Service からの複数の結果を効率的に処理するにはどうすればよいですか
私は ExecutorService を初めて使用しますが、これに対する私のアプローチについて確信が持てません。既知のタスクで最大 100 のスレッドを処理できます。以下の一般的な形式を使用しています。ここでは、FutureTasks のリストを作成し、これらを ExecutorService に送信します。ExecutorService はこれらの保留中の結果を返し、別のリストに追加します。次に、保留中の結果ごとに get() を呼び出して、このリストを反復処理します。
私のクエリは次のとおりです: 100 個のスレッドすべてが完了するまで、順番に各 get() でブロックされませんか? これを行うより良い方法はありますか?
そして、 get() が Callable 実装の call() メソッドの結果を返すと仮定するのは正しいですか? デフォルトの FutureTask クラスを使用していますが、サブクラス化していません。
java - Future.cancel(boolean) メソッドのユーティリティ
私は単に java.util.concurrent パッケージを調べていました。
クラス「Future」にはメソッドboolean cancel(boolean mayInterruptIfRunning)があることがわかりました
私が書いたテストコードを添付してください:
最初は、タスクをキャンセルすると実行中のスレッドの実行も停止すると想定していました(「OUCH」部分は含まれていません)。しかし、次のような出力が得られました。
stackoverflow自体をさらに読むと、次のように言われました
- 「キャンセル」メソッドは、「開始されていない」ジョブのみを停止できます (メソッドの API 記述と矛盾します)。
- cancel メソッドは、run() メソッドから戻らなければならない実行中のスレッドを単純に中断します。
したがって、「OUCH」部分を含めました-中断をチェックするwhileループ;出力は次のとおりです。
質問 :
実行中のスレッドを停止するために「OUCH」部分に類似したものを書くことになっている場合、キャンセルメソッドのユーティリティ/価値は何ですか。キャンセルでスレッドを停止できない場合、FutureTask で Callable をラップするとどのように役立ちますか? 私が見落としている設計/概念/論理的な部分は何ですか?
java - FutureTask とコールバックを使用した非同期呼び出しの実装
そのため、現在、BasicHttpClient を呼び出してインターネットから Http 応答を取得する非同期呼び出しを実装しようとしています。Http クライアントが作業を完了すると、Callee クラスのメソッドの 1 つが呼び出されます。
一般的に、私の実装は次のようになります。
コードは大幅に簡素化され、main() メソッドは Callee クラスの getResult() メソッドを呼び出します。ところで、すべての例外が処理され、コールバックを使用して呼び出し先に送り返します。
ただし、Callee クラスの「onRequestFinished」は呼び出されないようです。
助けてください。
java - Java: FutureTask 例外のロギング
専用スレッドで実行するタスクを定期的に送信するアプリケーションがあります。これらのタスクFutureTask<V>
とスレッドは、ジョブがキューに入るときにジョブを実行し、空の場合はスリープ状態になる無限ループにすぎません。
計算の結果を待つ必要がある場合もあるので、FutureTask の get() メソッドを呼び出します。これは、何か問題が発生した場合にも例外をスローします。しかし、結果がどうであったとしても気にしない場合がありますが、タスクの実行中に何らかの障害があったかどうかを知る必要があります (ログ、printStackTrace() など)。
必要のない get() を待たずにこれを達成する方法はありますか?
前もって感謝します!
UPDATE : タスクの実行後にランナー スレッドで get() を呼び出すことは、他の誰も結果を待たない場合に例外をキャッチする唯一の方法のように思われました。
もう 1 つの解決策は、FutureTask クラスを拡張して、Java リフレクションを介して sync.exception プライベート フィールドを公開するメソッドを提供することです。
java - 2つのファイルを同時に読み取ると、パフォーマンスが低下します
同時にファイルを読み込んで行数を返そうとしました
それはうまく機能しますが、ファイル1とファイル2の後に読んだ方が速いことがわかりました...したがって、futureTashでパフォーマンスが向上することはありません
なんで?
scala - タイムアウトを使用してscalaで操作を実行するにはどうすればよいですか?
コンテキスト:ページをクロールするためのスキャルディングジョブ(hadoop)を記述し、URL抽出でタイムアウトを設定したい(URLConnectionでタイムアウトなし、他のタイムアウトの場合の一般的なソリューションが必要)、つまりマップ関数。
それはメモリクリティカルなコードであるため、すべてのリソースが解放された後、いくつかのタイミングの後に殺される先物について考えています。ScalaAPIで何を使用するかわからない。
java - JavaFutureTask完了チェック
Oracle Java APIを確認しました。これにより、FutureTask.isDone()に関する情報が得られます。
ただし、タスクが完了したか、エラーで終了したかを確認する必要があります。isDone()メソッドは、完了/終了しても戻ります。しかし、何らかの問題で完了したのか終了したのかを知る必要があります。
java - 同期の問題:メインスレッドを別のスレッドの前に実行したいのですが、実行されない場合があります
私は、java.util.concurrency
パッケージに触発された独自の小さな並行性フレームワーク(学習目的のためだけに)を実行しました。これは、Callable/Futureメカニズムについてです。以下の私のコードは全体であり、コンパイル可能で非常に理解しやすいものです。
main thread
私の問題は、最初のスレッド( )が他のスレッドからのシグナルを待つデッドロックに遭遇することがあるということです。ただし、メインスレッドが待機状態になる前に、他のスレッドはすでにメインスレッドに通知しているため、メインスレッドはウェイクアップできません。
FutureTask.get()
常に前 FutureTask.run()
に実行する必要がありますが、run()メソッド(によって呼び出されるnew thread
)がget()メソッド(によって呼び出される)の前に実行される場合がありmain thread
ます。どうすればそれを防ぐことができるのかわかりません。
これは、2つのスレッドを実行する方法の擬似コードです。
新しいスレッドが実際に新しいスレッドを開始するメインスレッドよりも速く起動して実行される方法を理解できません。