Я думаю, что документы достаточно хорошо объясняют разницу и использование этих двух функций:
newFixedThreadPool
Создает пул потоков, который повторно использует
фиксированное количество работающих потоков
общая неограниченная очередь. В любом
Точка, не более чем nThreads темы будут
быть активным в обработке задач. Если
дополнительные задачи представляются при
все темы активны, они будут ждать
в очереди, пока поток не будет
имеется в наличии. Если какой-либо поток завершается
из-за сбоя во время исполнения
до выключения, новый примет
его место, если необходимо выполнить
последующие задачи. Нити в
Пул будет существовать до тех пор, пока не будет явно
неисправность.
newCachedThreadPool
Создает пул потоков, который создает новые
темы по мере необходимости, но будут использовать повторно
ранее построенные потоки, когда
они доступны. Эти бассейны будут
как правило, улучшить производительность
программы, которые выполняют много краткосрочных
асинхронные задачи. Звонки для выполнения
будет использовать ранее построенный
темы, если доступны. Если не существует
тема доступна, новая тема будет
быть создан и добавлен в пул.
Темы, которые не были использованы для
шестьдесят секунд прекращаются и
удаляется из кеша. Таким образом, бассейн
который остается бездействующим достаточно долго
не потреблять никаких ресурсов. Обратите внимание, что
бассейны с похожими свойствами, но
разные детали (например,
параметры тайм-аута) могут быть созданы
используя конструкторы ThreadPoolExecutor.
Что касается ресурсов, newFixedThreadPool
будет поддерживать работу всех потоков до тех пор, пока они не будут явно завершены. В newCachedThreadPool
потоки, которые не использовались в течение шестидесяти секунд, прекращаются и удаляются из кэша.
Учитывая это, потребление ресурсов будет очень сильно зависеть от ситуации. Например, если у вас огромное количество долгосрочных задач, я бы предложил FixedThreadPool
. Что касается CachedThreadPool
, в документах говорится, что «эти пулы обычно улучшают производительность программ, которые выполняют много кратковременных асинхронных задач».