問題タブ [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 - ExecutorService が完了するまでブロックする
重複の可能性:
ExecutorService、すべてのタスクが完了するのを待つ方法
Java ExecutorService: await 再帰的に作成されたすべてのタスクの終了
ExecutorService
すべてのタスクが完了するまで現在のスレッドをブロックする方法はありますか?
java - 洗練された非線形のタスク スケジューリング?
最初は頻繁にタスクが発生するようにスケジュールし、時間の経過とともに頻度を減らしたいと考えています。このためだけに、Quartz に依存関係を追加したくありません。
標準の Java ライブラリを使用して、私が思いついた最善の方法は、一連の 1 回限りのタスクと、それに続く頻度の低い線形スケジュールです。
よりエレガントなアプローチはありますか?
java - ExecutorServiceを使用したJavaのマルチスレッドコードが返されないのはなぜですか?
コードベースの他の場所に非常によく似たマルチスレッドコードがあり、正常に機能しますが、ここで何が問題になっているのかよくわかりません。
これは、検索クエリの結果XMLを生成するための単純なマルチスレッドプロセスです。このメソッドを実行した結果は次のとおりです。
スレッドから戻る
System.out.println( "Finished multithreading loop");"という行に到達することはありません。
スレッドの数を変更しても効果はありません。
編集、迅速な返信をありがとう!答えは次のとおりです。
結果の数だけ「処理結果」が表示されます。allResults.size()が25の場合、処理結果1、処理結果2...処理結果24が表示されます。
欠落している追加のコードは次のとおりです。
そして、誰かが疑問に思っている場合に備えて、ループ内のどのコードもallResultsのサイズを大きくしないことを保証できます。
java - 再帰的フィボナッチ数列を解決するJavaExecutorService
スレッドを使用してフィボナッチ数列のいくつかのインデックスに基づいて数値を再帰的に見つける必要があり、次のコードを試しましたが、プログラムが終了しません。何か足りないものがあれば教えてください。
コード:
修正しました(fiverに感謝します)
callメソッドからgetNumber(int)を呼び出す代わりに、そのインデックスの数値を計算する動的プログラミングアルゴリズムを呼び出しています。
そのためのコードは次のとおりです。
java - 長い計算により、ExecutorService は新しい作業の割り当てを停止します
PNGファイルのディレクトリで動作する5つのpngout.exeプロセスを生成することにより、PNGファイルを最適化しています。pngout はシングル スレッドであるため、大幅な高速化が実現します。画像によっては、最適化に 30 秒以上かかるものもありますが、通常は 5 秒未満です。問題:
- ファイル 1 は大きく、2 ~ 5 は小さく、合計 50 ファイルですが、残りの詳細は関係ありません。
- 最初の 5 つの pngout プロセスが正常に生成され、動作を開始します
- 10秒以内に2-5回退出
- 1 45 秒かかります
- 4 つのスレッドが空いているにもかかわらず、この間、新しい pngout プロセスは生成されません。
- 1 が完了すると、さらに 5 つのプロセスが生成されます。
コード:
すべてのファイルが適切に最適化され、コードのその部分が機能します。問題は、大きな画像を待機することで、プロセス全体が大幅に遅くなることです。シングルスレッド時間よりも 40% しか改善されません。
私は何を間違っていますか?
編集:いくつかの本当に醜いコードを使用して、問題を修正しました。問題は、私がスポーンしていたプロセスの終了値を取得するために (いつ終了し、成功したかを知るために)、waitFor を呼び出すと永久にハングするため、stdout を何も読み取っていなかったことです。ただし、明らかに InputStreams を使用すると、スレッドがチョークします。
したがって、これを使用する代わりに、プロセスの終了値を取得するには:
私はこのグロスコードを使用しています:
ひどいですが、システムは正常に動作し、常に 5 つのプロセスが実行されています。
後半の編集:ここからの StreamGobblerは、おそらくより適切です。
java - ThreadPoolExecutorおよびjoin()
SomeServiceでThreadPoolExecutorを使用して、データに対していくつかの作業を実行しています。問題は、ThreadPoolExecutorにスケジュールされた作業スレッドが完了する前にSomeServiceTestが完了することです。SomeServiceスレッドを作業スレッドに結合したい。エグゼキュータが開始した時点で親スレッドを作業スレッドに結合する方法はありますか?
どんな助けでもいただければ幸いです。
java - スレッドがブロックされているときに ExecutorService が実行され続けるのはなぜですか?
固定スレッド プールの各スレッドがキューからオブジェクトを取得しようとするマルチスレッド プログラムの一部を作成しようとしています。キューが空の場合、スレッドは待機します。
私が経験している問題は、プログラムが使用するメモリが増え続けることです。
アイテムがキューに追加されるのをスレッドが待機する必要があるときに、executor.execute が起動し続ける理由がわかりません。これを反映するようにコードを変更するにはどうすればよいですか?
java - ExecutorService.shutdown()の直後に未処理のタスクを実行するにはどうすればよいですか?
1ScheduledExecutorService
時間で実行するようにスケジュールされたタスクがあります。未処理のタスクのリストを取得して、それらをすぐに実行するようにするにはどうすればよいですか?
Runnableの実装はExecutorの状態をチェックし、シャットダウンしたことに気付いたときにRunnableが実行を拒否するため、1時間待つと、run()を実行できないRunnableのリストが返されるshutdown()
ように見えます。実際の実装についてはshutdownNow()
を参照してください。ScheduledThreadPoolExecutor.ScheduledFutureTask.run()
何か案は?
java - すべてのスレッドが完了した後でも、アプリケーションが数分間ハングします
動作中のプロデューサー/コンシューマーの例をスレッド/実行可能からエグゼキューター/呼び出し可能/ブロッキングキューに変換し、ポイズンピルの終了パターンを使用しました。
以下のプログラムを実行すると、すべてのスレッドが完了しても、数分間ハングします。jstackは、アプリケーションに関連していないように見えるキューでブロックされた多数のスレッドを示しています。
アプリケーションがハングする理由がわかりません。どんな助けでも大歓迎です。ありがとうございました
java - Javaマルチスレッドとタイムアウト
Javaアプリケーションをでマルチスレッド化しようとしていますScheduledThreadPoolExecutor
。これを行うには、タスクを将来のリストに送信してから、将来のリストから結果を取得しようとします。ただし、何らかの理由で、htopを実行すると、コンピューター上の1つのコアしか使用されません。
さらに、プロセスがハングすることがあります。これは、使用しているライブラリが原因であると思われます。したがって、スレッドが新しいオブジェクトで再起動した後、基本的に時間制限を実装するための良い方法は何でしょうか。
ありがとう。