2017-02-21 1 views
1

FixedThreadPoolまたはScheduledThreadPoolにスレッド数を増やす方法があるかどうかを知りたかったので、すべてのスレッドが使用されています。 これはの例です。FixedThreadPoolをサイズ5とし、すべてのスレッドが使用中であれば、実行する必要がある別のタスクまたは機能はスレッドが空き状態になるのを待たなければなりません。私はこれを避ける必要があり、スレッドの数はCachedThreadPoolを使用せずに動的に増加しなければなりません。 そうする方法はありますか?すべてのスレッドが使用されているときにnewFixedThreadPoolまたはnewScheduledThreadPoolのスレッド数を増やす方法はありますか?

例2:

ScheduledExecutorService execService = Executors.newScheduledThreadPool(1); 

私は、このスレッドは、他のタスクが実行されるように、いくつかのタスクを実行中にビジー状態のとき今、右待たなければならない1に、上記の例2内のスレッドの数が限られています? 今、私は望みます:この固定数のスレッドは動的に増加しなければなりません。 これを行うにはどうしてですか?

+3

のために行く必要が

- 増加するが、スレッド数がキャッシュされたスレッドプールのように聞こえるので、なぜそれを使わないのでしょうか? – Fildor

+0

http://stackoverflow.com/a/3160266/7573818を参照してください。 –

+0

[タスクがまだ待機している間にjava.util.concurrent.ThreadPoolExecutorを動的にサイズ変更できますか?](http://stackoverflow.com/質問/ 2791851/can-you-dynamically-resize-a-java-util-concurrent-threadpoolexecutor-while-it-st) –

答えて

2

実際にはScheduledThreadPoolExecutorというScheduledExecutorServiceを実装するクラスは1つだけです。これには、コアスレッドプール(または最小サイズ)と最大スレッドプールサイズを持つことができるスレッド数を定義する2つのパラメータがあります。

固定スレッドプールファクトリメソッドは、最小値と最大値が同じであるこのクラスのインスタンスを作成します。

キャッシュスレッドプールファクトリメソッドは、最小値が0であり、実際の最大値を持たないインスタンスを作成します。

動的スレッドプールサイズが必要な場合は、適切と思われる最大値と最小値を設定することをお勧めします。インスタンスディレクトリを作成するか、固定/キャッシュされたスレッドプールを使用しても、それほど大きな違いはありません。

0

ScheduledExecutorService execService = Executors.newScheduledThreadPool(1);

いいえここでScheduledExecutorServiceは新しいスレッドを生成しません。あなたは「CachedThreadPoolを使用せずに」newCachedThreadPool

関連する問題