1

のjavadocからThreadPoolExecutor

メソッド execute(java.lang.Runnable) で新しいタスクが送信されると .... 実行中のスレッドが corePoolSize より多く、 maximumPoolSize より少ない場合、キューがいっぱいの場合にのみ新しいスレッドが作成されます。

ThreadPoolこの状況でタスクをキューに送信する代わりに、新しいスレッドを開始するにはどうすればよいですか?

例:

corePoolSize=5 と maxPoolSize=10 のスレッドと無制限のキューがあります。

corePoolSizeスレッドが現在ビジーで、新しいタスクが到着したとします。プールは新しいスレッドを開始し、新しいタスクを実行する必要があります。

maxPoolSizeスレッドが現在ビジーで、新しいタスクが到着したとします。プールはタスクをキューに永続化する必要があり、最初に空きスレッドがこのタスクを取得して実行する必要があります。

4

3 に答える 3

2

すべてのスレッドがビジー状態のときにのみタスクがキューに入れられる、最大サイズのスレッド プールが必要な場合。

ExecutorService service = Executors.newFixedThreadPool(numberOfThreads);

タスクをキューに入れず、必要に応じて新しいスレッドを作成する、キャッシュされたスレッド プール。スレッドが空いている場合は、スレッドを再利用します。

ExecutorService service = Executors.newCachedThreadPool();
于 2012-09-26T12:34:07.567 に答える
1

アイドル状態のスレッドが利用できるかどうかに関係なく、毎回新しいスレッドを開始したい場合は、ThreadPool はまったく必要ありません。新しいスレッドを手動で作成して開始するだけです。これは、スレッドが作業を行った直後に終了し、ThreadPool で新しいジョブをしばらく待機するが、それを取得せず、メモリを浪費するだけであるため、より良い方法です。

于 2012-09-26T12:32:56.333 に答える