3

В случае, если newCachedThreadPool() создает пул потоков, который при необходимости создает новые потоки, но будет использовать ранее созданные потоки, когда они будут доступны, тогда как в случае newFixedThreadPool(int size) укажите размер для создания пула потоков с размером указано.newFixedThreadPool() vs newCachedThreadPool()

Почему нет newFixedThreadPool(int size), реализованный в newCachedThreadPool() моде, где пул потоков создает новую цепочку только при необходимости и ограничивает размер потока?

Любые разъяснения по вышесказанному действительно полезны.

+1

Связанный: http://stackoverflow.com/questions/949355/newcachedthreadpool-vs-newfixedthreadpool – Maroun

+1

Потому что это больше не будет ** фиксированным ** пулом потоков. Созданные пулы потоков являются экземплярами ThreadPoolExecutor, созданных с различными параметрами. Создание запуска нового потока занимает некоторое время, и вы можете захотеть, чтобы это время было принято при запуске, а не при отправке новой задачи. –

+0

@JBNizet Не будет ли он содержать ресурсы в случае фиксированного пула потоков. Его решение между которыми более дорогое. Любое понимание этого. – Brinal

ответ

4

newFixedThreadPool также создает потоки лениво, попробуйте этот тест

ThreadPoolExecutor p = (ThreadPoolExecutor) Executors.newFixedThreadPool(2); 
    System.out.println(p.getPoolSize()); 
    p.execute(new Runnable() {public void run() {}}); 
    System.out.println(p.getPoolSize()); 

Разница заключается в том, что а) потоки FixedThreadPool никогда не истекает, в то время как CacheThreadPool истекает через 60 секунд после последнего использования б) CacheThreadPool активный максимум активных потоков неограничено