問題タブ [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 - java.util.concurrent
Runnableクラスのrunメソッドを開始しようとしていますが、NullPointerExceptionが発生し続けています。また、WebSpherecommonj.workmanagerを使用してexecutorServiceのインスタンスを取得しています。これはimが使用しているコードです。
java - Java fixedThreadPool を複数のスレッドで使用できますか
結果を返す前に複数の小さな計算を行う Web サービスがあります。ExecutorService
マスター - ワーカー パターンを実装する方法として提供されたを使用したいExecutors.newFixedThreadPool()
(つまり、呼び出しinvokeAll
て、すべての結果が終了するまでスレッドを待機させる)。理想的には、すべての Web サービス スレッドが同じエグゼキュータ サービスを使用して、すべてが独自のスレッド プールを作成する必要がなく、システムのすべての処理時間を消費する 1 つの大きなプールを共有できるようにします。
このアプローチに関する質問:
invokeAll
複数のスレッドから関数にアクセスしても安全ですか。- エグゼキュータ サービスはリクエストを順番に処理しますか (つまり、最初にスレッド 1 のすべてのタスクを処理し、次にスレッドのタスクを処理します)。
- 10 個のワーカー スレッドを使用し、受信する要求の数に応じて使用可能なスレッドの最大数を設定する方法はありますか。つまり、1 つの要求があるとします。その要求に対して 10 個のスレッドすべてが使用されます。2 つのリクエストがある場合、リクエストごとに 5 つのスレッドに分割されます。
java - 単一のタスク エグゼキューターがタスクの処理を停止するのはどのような場合ですか?
java.util.concurrent.ExecutorService
を呼び出して取得した を使用していExecutors.newSingleThreadExecutor()
ます。これExecutorService
により、シャットダウンされておらず、例外をスローすることなく新しいタスクを受け入れ続けている場合でも、タスクの処理が停止することがあります。OutOfMemoryError
最終的に、アプリが例外でシャットダウンするのに十分な数のキューが構築されます。
ドキュメントは、このシングル スレッド エグゼキュータは、必要に応じて新しいワーカー スレッドを起動して、停止したスレッドを置き換えることにより、タスク処理エラーを乗り切る必要があることを示しているようです。何か不足していますか?
java - JavaタイマーとExecutorService?
を使用してタスクをスケジュールするコードがありますjava.util.Timer
。私は周りを見回してExecutorService
いて、同じことができるのを見ました。ここでの質問ですが、タスクをスケジュールするためTimer
に とを使用したことがありますか?ExecutorService
Timer
また、誰かがクラスを使用して、解決した問題に遭遇したかどうかを確認したいと考えていExecutorService
ました。
java - Generic Asynchronous Java Job Execution Framework / Libraryの検索
Callable
s またはsを処理できる一般的な非同期 Java ジョブ実行フレームワークを探していますRunnable
。java.util.concurrent.ExecutorService
, (およびおそらく wrap )に似てExecutorService
いますが、次の機能も備えています。
ジョブの処理中にアプリケーションがダウンした場合にジョブをデータベースに保持し、未完了のジョブを再開できる機能。(私の仕事は実装する必要があるかもしれないことを理解してい
Serializable
ます。)UUID を使用して、クライアントがジョブ トークンを取得し、ジョブ ステータスを照会できるようにします。(内部では、この情報はデータベースにも保持されます。)
私は を中心に構築することで自分自身でこれに取り組み始めましExecutorService
たが、すぐに使用できるオープン ソース ソリューションがあればそれを使用したいと思います。
Spring Framework 内で機能するものが理想的です。
java - Executors.newCachedThreadPool()とExecutors.newFixedThreadPool()
newCachedThreadPool()
対newFixedThreadPool()
いつどちらを使うべきですか?リソース使用率の観点から、どちらの戦略が優れていますか?
java - Java 5:java.util.concurrent.FutureTask-cancel()およびdone()のセマンティクス
私は現在、FutureTasksとExecutorsを使用して、マルチスレッド環境で厄介なバグを探しています。基本的な考え方は、固定数のスレッドに、テーブルに表示される結果を計算する個々のFutureTasksを実行させることです(ここではGUIの側面を気にしないでください)。
私はこれを長い間見てきました、私は自分の正気を疑うようになり始めています。
このコードを考えてみましょう。
MyTaskdone()
のインスタンスを処理するエグゼキュータによって呼び出された場合、タスクがキャンセルされたため、そこに到達したかどうかを確認します。もしそうなら、私は残りのすべての活動をスキップします、特に私は電話しませんsendMessage()
。
FutureTask.done()のドキュメントには次のように書かれています。
このタスクが状態isDoneに遷移するときに呼び出される保護されたメソッド(通常またはキャンセルを介して)。デフォルトの実装は何もしません。サブクラスは、このメソッドをオーバーライドして、完了コールバックを呼び出したり、簿記を実行したりできます。このメソッドの実装内でステータスを照会して、このタスクがキャンセルされたかどうかを判断できることに注意してください。(APIリファレンス)
しかし、のドキュメントから得られないのは、実行中FutureTask
のセマンティクスです。最初にチェックに合格したが、その直後に他のスレッドが私のメソッドを呼び出した場合はどうなりますか?それは私の仕事の考えを変え、それ以降に返信する原因になりますか? done()
isCancelled()
cancel()
isCancelled() == true
もしそうなら、メッセージが送信されたかどうかを後でどうやって知ることができますか?見てみるisDone()
と、タスクの実行が終了したisCancelled()
ことがわかりますが、そのときもそうであったように、メッセージを時間内に送信できるかどうかはわかりませんでした。
たぶんこれは明らかですが、私は今それを実際には見ていません。
java - ExecutorServiceを使用して、すべてのスレッドが終了するのを待つ方法は?
次のように、一度に4つのタスクを実行する必要があります。
それらがすべて完了したら、どうすれば通知を受け取ることができますか? 今のところ、いくつかのグローバル タスク カウンターを設定し、すべてのタスクの最後にそれを減らし、無限ループでこのカウンターが 0 になるのを監視する以外に良いことは考えられません。または、Future のリストを取得し、それらすべてについて無限ループ モニター isDone を取得します。無限ループを含まないより良い解決策は何ですか?
ありがとう。