2017-01-25 16 views
0

調整可能なキューサイズで調整可能なスレッドプールを作成する予定です。私は無制限のLinkedBlockingQueueを使用して、キューに入れられるメッセージの数を制御する外部設定を使用しています。最初、私のcorepoolsizeとmaxpoolsizeは等しいです。今、実行時にスレッドプールのサイズを更新したい場合は、corepoolsizeとmaxpoolsizeを共通の設定で別の値に設定します。このアプローチについてどう思いますか知りたい。調整可能なスレッドプールとキュー

maxpoolsizeをInteger.MAX_VALUEに設定すると、キューが無制限なのでcorepoolsizeを調整できますか?

外部制御とLinkedBlockingQueueの代わりにCallerRunsPolicyでSynchronousQueueを使用することをお勧めしますか?

重要:コアスレッドプールのサイズを小さくするとどうなるのか知りたいのですが、進行中のタスクは途中で放棄されますか?

+0

http://stackoverflow.com/questions/5719279/how-to-modify-threadpooltaskexecutor-at-runtime-through-jmx –

+0

なぜCachedThreadPoolを試してみませんか? http://stackoverflow.com/questions/17957382/fixedthreadpool-vs-cachedthreadpool-the-lesser-of-two-evils –

+0

実行時にthreadpoolsizeを増減したいので、CachedThreadPoolは役に立ちません。 – theeminence

答えて

0

私にはほとんど質問がありません。 SynchronousQueueを探している理由は何ですか? SynchronousQueueは、ここでのドキュメントによると、任意の容量でも、1 を付属していません - how to modify ThreadPoolTaskExecutor at runtime through jmx

各挿入操作は、対応する別のスレッドで操作を削除し、その逆のを待つ必要があるブロッキングキューを。同期キューには内部容量はなく、容量も1ではありません。

私の意見では、私たちのユースケースは私たちに同じものを使用させない限り使用してはいけません。あなたのユースケースについて公正なアイデアが得られない限り、私はコメントをすることができません。

前述のとおり、CachedThreadPoolは、コアプールのサイズを除いて、必要とする正確な機能を実行するため、同じものを評価したい場合があります。また、corepoolsizeを減らしても、基本となるタスクが終了しない限り、進行中のスレッドは停止しません。同じことを心配する必要はありません。 how to modify ThreadPoolTaskExecutor at runtime through jmx

+0

corepoolsizeポインタに感謝します。 – theeminence

+0

CallerRunsPolicyを使用したSynchronousQueueは基本的にキューとして機能し、無制限キューの外部コントロールを初期引数から置き換えます。 – theeminence

+0

キューイングの前に自分のタスクに複雑な処理がないので、キューを使ってタスクをバッファする必要はありません – theeminence

関連する問題