問題タブ [threadpoolexecutor]

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.

0 投票する
1 に答える
577 参照

java - ThreadPoolExecutor の制限付きキューのクリーンアップ

Threadpool executor のドキュメントを読んでいるときに、以下を参照してください。

提供されている 2 つのメソッド remove(java.lang.Runnable) と purge() を使用して、キューに入れられた多数のタスクがキャンセルされたときにストレージの再利用を支援できます。

タスクがキャンセルされた場合、これらのメソッドを使用してワーカー キューをクリーンアップできることを理解しています。実際のソースのどの部分がこのクリーンアップを自動的に行うのかを理解しようとしています。10 のキューで開始し、そのうち 4 つのタスクがキャンセルされ、新しいタスクが到着したときに、キューのサイズが 6 になるか、キャンセルされた 4 つのタスクを無視して 10 にリセットするとします。

ソースから、次のコメントが表示されます。

しかし、ソース内のキャンセルされたタスクをワーカー スレッドがアクティブに削除する場所を教えてください。

お時間をいただきありがとうございます。

0 投票する
3 に答える
2740 参照

java - threadPoolExecutor が実行を終了したことを確認する方法

MQ にメッセージを送信する親スレッドがあり、MQ をリッスンして出力ファイルにメッセージを書き込むワーカー スレッドの ThreadPoolExecutor を管理します。サイズ 5 のスレッドプールを管理しています。そのため、プログラムを実行すると、メッセージを含む 5 つのファイルが作成されます。ここまではすべて正常に動作します。これら 5 つのファイルを親スレッドにマージする必要があります。

ファイルのマージを開始できるように、ThreadPoolExecutor が処理を終了したことを確認するにはどうすればよいですか。

これは私のワーカークラスです

ThreadPool の処理が終了したことをどのように知ることができるので、他のクリーンアップ作業を行うことができますか?

ありがとう

0 投票する
4 に答える
472 参照

java - シングルトンの他のメンバー

私の質問は幅広いので、2 つの部分に分けて、これまでに知っていることをできるだけ具体的にしようとしました。

前編

シングルトンは、それ自体のプライベートな静的インスタンスを保持します。シングルトンに関するいくつかの質問:
1. メンバーも静的にする必要がありますか、それとも要件に依存しますか?
2. 1. に対する答えが明確に「はい」の場合、すべてのメンバーがクラスに属している場合、最初にプライベート インスタンス変数を使用する意味は何ですか?
3. JVM はその (JVM の) 存続期間中保持する参照可能オブジェクト (THE シングルトン) を必要とするため、プライベート インスタンスが必要ですか?

第二部

Tomcat がホストする Web アプリケーション内で複数の同時リモート呼び出しを行う必要があります (アプリは一部のコンポーネントに GWT を使用するため、適切なソリューションでこれが必要な場合は、前述の要件にサーブレットを使用できます)。現在、そのような呼び出しを必要とする個々のプロセス フローごとに、呼び出し可能オブジェクト(エンドポイント構成を含む各呼び出し可能オブジェクト)を渡すキャッシュされたスレッド プールを使用してエグゼキュータ サービスを作成しています。私にとっては、独自のプールを生成するのではなく、スレッド プールが複数のフローで共有されていれば意味があります。静的スレッドプールを保持するシングルトンは、これに適したソリューションでしょうか?

0 投票する
3 に答える
3250 参照

java - Why can't i instantiate ThreadPoolExecutor with BlockingQueue; why only BlockingQueue?

My understanding is that callable was added in 1.5 and the runnable interface was kept as-is to prevent the world from ending. Why can't I instantiate a ThreadPoolExecutor(core, max, tu, unit, new BlockingQueue<Callable>()) - why does the queue necessarily take runnable only? Internally, if i were to submit, invokeAll, invokeAny callables, this should be fine right? Also, would shutDownNow() return a list of callables?

0 投票する
5 に答える
9366 参照

java - ThreadPoolExecutor での allowCoreThreadTimeout( ) の使用は何ですか?

Android のコンポーネントの 1 つで Java ThreadPoolExecutor を使用する必要があります。allowCoreThreadTimeout( ) の使用を検索していました。

関連する Java と Android のドキュメントを読みました。しかし、メソッドの有用な実装シナリオは得られませんでした。誰かが私を助けてくれませんか??

0 投票する
4 に答える
632 参照

java - キューイングよりも新しいスレッドの作成を優先するようにカスタマイズ可能な ThreadPoolExecutor のキューイング動作?

ThreadPoolExecutor doc によると

corePoolSize 以上のスレッドが実行されている場合、Executor は常に、新しいスレッドを追加するよりも要求をキューに入れることを優先します。


実行中のスレッドが corePoolSize より多く、 maximumPoolSize より少ない場合、新しいスレッドはキューがいっぱいの場合にのみ作成されます。

コアサイズよりも多くのスレッドがある場合でも、最大数に達するまでエグゼキューターに新しいスレッドの作成を優先させ、キューイングを開始する方法はありますか? キューが最大サイズに達すると、タスクは拒否されます。ビジーバーストが処理された後、タイムアウト設定が開始され、スレッドがコアサイズまで削除されるとよいでしょう。スロットリングを可能にするためにキューに入れることを好む理由がわかります。ただし、このカスタマイズにより、キューが主にまだ実行されていないタスクのリストとして機能できるようになります。