5

ThreadPoolExecutor doc によると

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


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

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

4

4 に答える 4

1

アクティビティが少ない時間帯の待ち時間を最小限に抑えることをお好みのようです。そのためには、corePoolSize を最大に設定し、余分なスレッドをぶら下げます。アクティビティが多い時間帯でも、これらのスレッドは存在します。活動の少ない時期には、それらの存在はそれほど影響を与えません。ただし、コアスレッドを停止させたい場合は、コアスレッドのタイムアウトを設定できます。

そうすれば、できるだけ早くタスクを実行するためにすべてのスレッドが常に利用可能になります。

于 2013-08-14T17:12:24.407 に答える