問題タブ [executorservice]
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 - Callbable と Runnable での「ExecutorCompletionService」の使用に関する問題
ExecutorCompletionService のサンプル コードを使用して、次のサンプル コードをまとめました。solve() のコードは期待どおりに動作し、出力され
ます。 solve2() のコードは何も出力せず、実際には終了しません。ジョブを ExecutionService に送信する前または後に ecs を構築するかどうかは問題ではありません。
1
2
3
4
5
FutureTasks で CompletionService コンストラクトを使用する方法はありませんか? ExecutorCompletionService から get() しようとするのではなく、FutureTask の結果を直接 get() するように本番コードを書き直しましたが、(現在) 見た目がややこしいものになっています。要するに、以下のsolve2の何が問題になっていますか? ありがとう。
}
java - Java: 作成するタイマーとスレッド
この質問があります:
私はタイマーを持っています。scheduleAtFixedRate を使用すると、新しいタイマー タスクが作成されます。そのタイマー タスクには、完了するまでに時間がかかる特定のコードがあります。前のタスクがまだ完了していないときにタイマーが新しいタスクを作成しないようにするにはどうすればよいですか?
ありがとう
java - バックグラウンドタスクの進捗状況を報告するにはどうすればよいですか?
ExecutorServiceスレッドプールのバックグラウンドで実行されている長時間実行タスクがあります。進捗状況または中間結果を返すこのタスクに関するいくつかのベストプラクティスは何ですか?この機能を提供するライブラリはありますか?
編集:明確にするために、私は進行状況をユーザーではなく他のコードに報告することについて話している。
通常はSwingWorkerを使用しますが、GrailsアプリのJava / Groovyバックエンドを使用しており、EDTとの関係があるため、ヘッドレスサーバー環境でどのように動作するかわかりません。
もう1つの例は、Eclipse RCPのJobsフレームワークですが、UIとは関係のないものが必要になります。
java - ExecutorService によるタスクの実行順序の制御
非同期タスクをスレッドのプールに委任するプロセスがあります。特定のタスクが順番に実行されるようにする必要があります。たとえば
タスクが順番に到着する
タスク a1、b1、c1、d1、e1、a2、a3、b2、f1
自然な依存関係がある場合を除いて、タスクは任意の順序で実行できるため、a1、a2、a3 は、同じスレッドに割り当てるか、前の a# タスクが完了したことがわかるまでこれらをブロックすることによって、その順序で処理する必要があります。
現在、Java Concurrency パッケージは使用していませんが、スレッド管理を活用するために変更を検討しています。
誰もがこれを達成する方法について同様の解決策または提案を持っていますか
java - すべてのライブスレッドがデーモンであるのに、EDTがシャットダウンしないのはなぜですか?
次のコードは、カードを画面上でスライドさせます。メインウィンドウをシャットダウンすると、イベントディスパッチスレッドもシャットダウンするはずですが、そうではありません。ScheduledExecutorServiceスレッドがEDTのシャットダウンを妨げる理由について何か考えはありますか?
java - 生産者/消費者作業キュー
私は自分の処理パイプラインを実装するための最良の方法に取り組んでいます。
私のプロデューサーは、BlockingQueueに作業をフィードします。コンシューマー側では、キューをポーリングし、Runnableタスクで取得したものをラップして、ExecutorServiceに送信します。
これは理想的ではありません。もちろん、ExecutorServiceには独自のキューがあるので、実際に起こっていることは、常に作業キューを完全に使い果たし、タスクキューをいっぱいにしていることです。タスクキューは、タスクが完了するとゆっくりと空になります。
プロデューサー側でタスクをキューに入れることができることはわかっていますが、実際にはそうはしません。作業キューの間接参照/分離がダム文字列であることが好きです。彼らに何が起こるかは、実際にはプロデューサーの仕事ではありません。プロデューサーにRunnableまたはCallableをキューに入れるように強制すると、抽象化、IMHOが壊れます。
ただし、共有ワークキューで現在の処理状態を表す必要があります。消費者が追いついていない場合は、生産者をブロックできるようにしたいと思います。
エグゼキュータを使いたいのですが、エグゼキュータのデザインと戦っているような気がします。Kool-adeを部分的に飲むことはできますか、それとも飲み込む必要がありますか?私はキューイングタスクに抵抗することに頭を悩ませていますか?(1タスクキューを使用するようにThreadPoolExecutorを設定し、そのexecuteメソッドをオーバーライドして、reject-on-queue-fullではなくブロックすることができると思いますが、それはひどい感じです。)
提案?
java - JavaExecutorServiceタスクからの例外の処理
ThreadPoolExecutor
Javaのクラスを使用して、固定数のスレッドで多数の重いタスクを実行しようとしています。各タスクには、例外が原因で失敗する可能性のある多くの場所があります。
私はサブクラス化し、タスクの実行中に発生したキャッチされない例外を提供することになっているメソッドをThreadPoolExecutor
オーバーライドしました。afterExecute
しかし、私はそれを機能させることができないようです。
例えば:
このプログラムからの出力は、「すべてが順調です-状況は正常です!」です。スレッドプールに送信された唯一のRunnableが例外をスローしたとしても。ここで何が起こっているのかについての手がかりはありますか?
ありがとう!
java - ExecutorServicesへのキュー長インジケーターのエレガントな実装
なぜ、ああ、なぜそのsのjava.util.concurrent
キュー長インジケーターを提供しないのですか?ExecutorService
最近、私は自分が次のようなことをしていることに気づきました。
これは問題なく動作しますが...これは実際にはの一部として実装する必要があると思いますExecutorService
。実際のキューから分離されたカウンターを持ち歩くのはばかげてエラーが発生しやすく、その長さはカウンターが示すことになっています(C配列を思い出させます)。ただし、ExecutorService
sは静的ファクトリメソッドを介して取得されるため、他の点では優れたシングルスレッドエグゼキュータを単純に拡張してキューカウンタを追加する方法はありません。だから私は何をすべきか:
- JDKにすでに実装されているものを再発明しますか?
- 他の賢い解決策?
java - ExecutorServiceタスクで無限ループを停止します
スレッドが無限ループを実行するのを停止する方法はありますか?
java - Javaスレッドプールの各ワーカースレッドでカスタムcloseメソッドを呼び出すためのエレガントな方法は何ですか?
私が使用していると言う
いくつかの作業をスピンアップし、それが完了するのを待ちます。
ただし、ワーカースレッドには同じThreadlocalオブジェクトがあり、バッチが完了したときに閉じる必要があります。したがって、スレッドプールによって作成されたすべてのワーカースレッドでカスタムcloseメソッドを呼び出せるようにしたいと思います。
それを行うための最もエレガントな方法は何でしょうか?
現在、私が使用しているハックとして:
しかし、それは私には特に頑強に見えません;-)
ありがとうGJ