Определение для ExecutorService.newCachedThreadPool()
равно
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
threadFactory);
}
Создается пул с corePoolSize = 0
, maximumPoolSize = Integer.MAX_VALUE
и неограниченной очередью.
Однако в документе для ThreadPoolExecutor
написано:
Когда новая задача отправляется в метод execute (java.lang.Runnable) и выполняется меньше потоков corePoolSize, создается новый поток для обработки запроса, даже если другие рабочие потоки простаивают. Если запущено больше потоков corePoolSize, но меньше MaximumPoolSize, новый поток будет создан, только если очередь заполнена .
Так как же corePoolSize = 0
работает в этом случае? Первоначально, есть нить 0, так что, хотя в документации не сказано, я предполагаю, что она создаст новую нить для первой отправленной задачи. Но теперь, теперь, когда у нас есть 1 поток> corePoolSize = 0 и 1 поток