Ответ на ваш первый вопрос - нет разницы между первым и вторым, в обоих случаях Spring будет осуществлять управление пулом потоков, потому что вы вызываете метод execute
в Spring * ThreadPoolTaskExecutor
,если бы вы вызывали его на java.util.concurrent.ThreadPoolExecutor
, то Spring не мог бы обработать управление пулом потоков.
Ответ на ваш второй вопрос - если вы используете Spring * ThreadPoolTaskExecutor
, тогда управление пулом потоковбудет обработан весной.Вы прочитали о размере основного пула, максимальном размере пула и емкости очереди, чтобы понять, как контролировать количество одновременно работающих потоков.
В целом Я думаю, что вы не уверены в том, что Spring фундаментальноконтейнер IOC и Spring предоставляют ThreadPoolTaskExecutor
для управления пулом потоков (что является ничем иным, как версией Spring java.util.concurrent.ThreadPoolExecutor
в Java).
Поймите это следующим образом: когда вы делаете taskExecutor.execute(aTask1);
, тогда управление пулом потоков будет обрабатываться Spring, потому что вы используете Spring * ThreadPoolTaskExecutor
, так же как управление компонентами будет обрабатываться Spring, потому что SpringaTask1
является объектом Spring bean.И когда вы делаете taskExecutor.execute(new ATask("A task 1"));
, тогда управление пулом потоков будет обрабатываться Spring, потому что вы используете Spring ThreadPoolTaskExecutor
, НО на этот раз управление бином не будет выполняться Spring, потому что вы используете new
для создания объекта самостоятельно.