В этой статье представлена конфигурация пула Spring Threadpooltaskexecutor и делится с вами следующим образом:
1. Конфигурация ThreadPooltaskexeCutor
<!-Исполнитель Pring Thread Pool-> <Bean id = "taskexecutor"> <!-Минимальное количество потоков, поддерживаемых пулом потоков-> <name = "corepoolsize" value = "5" /> <!-разрешенное время на холостое время-> <Название свойства = "Keepaliveseconds" value = "200" /> <! value = "10" /> <!-очередь кэша-> <name = "Queuecapacity" value = "20" /> <!-Политика обработки для отклонения задач-> <Property Name = "drecectedExecutionHandler"> <bean /> < /property> < /bean>
Описание поля атрибута
CorePoolsize: минимальное количество потоков, поддерживаемых пулом потоков
Keepaliveseconds: разрешено свободное время
maxpoolsize: максимальное количество потоков, поддерживаемых пулом потоков
Queuecapanity: очередь кеша
DecuceedExecutionHandler: стратегия обработки для отклонения задачи
2. Выполнить (выполняемый) процесс выполнения метода
Если в настоящее время количество пулов потоков меньше, чем CorePoolSize, даже если потоки в пуле потоков все простаивают, необходимо создать новый поток для выполнения добавленных задач.
Если число в пуле потоков равна CorePoolsize, но рабочая очередь буфера не заполнена, то задача помещается в очередь буфера.
Если в настоящее время количество пулов потоков больше, чем CorePoolsize, то заполнено буферная очередь, а количество пулов потоков меньше, чем MaxPoolsize, создайте новый поток для выполнения дополнительных задач.
Если в настоящее время число в пуле потоков больше, чем CorePoolsize, в настоящее время заполнено буферная очередь, а число в пуле потоков равно maxpoolsize, то эта задача обрабатывается через политику, указанную обработчиком. То есть приоритет задач обработки: Core Corepoolsize, очередь задач, максимальная резьба Maximumpoolsize. Если все три заполнены, используйте обработчик, чтобы выполнить отклоненную задачу.
Когда количество потоков в пуле потоков больше, чем CorePoolsize, если поток простаивает больше, чем в течение всего времени, поток будет прекращен. Таким образом, пул потоков может динамически регулировать количество потоков в бассейне.
3. Пример кода
Джунит Тест
@Runwith (springjunit4classrunner.class) @contextconfiguration (classes = {multiThreadConfig.class}) открытый класс MultiThreadTest {@Autowired Private ThreadPooltaskexeCutor TaskexeCutor; @Autowired Private MultiThreadProcessService MultiThreadProcessService; @Test public void test () {int n = 20; for (int i = 0; i <n; i ++) {taskexecutor.execute (new MultiThreadDemo (MultiThreadProcessService)); System.out.println ("int i is" + i + ", теперь ThreadPool Active Threads TotalNum - + taskexeCutor.getActiveCount ()); } try {System.in.read (); } catch (ioException e) {бросить новое runtimeexception (e); }}}MultiThreadDemo
/** * Многопользовательская одновременная обработка демо * @author daniel.zhao * */public Class MultiThreadDemo реализует Runnable {Private MultiThreadProcessService MultiThreadProcessService; public multiThreadDemo () {} public multiThreadDemo (MultiTHreadProcessService MultiThreadProcessService) {this.MultIThReadProcessService = MultiTHreadProcessService; } @Override public void run () {MultiThreadProcessService.processSomeThing (); }}MultiThreadProcessService
@ServicePublic Class MultiThreadProcessService {public Static Final Logger logger = logger.getLogger (MultiThreadProcessService.class); / ** * Процесс обработки по умолчанию занимает 1000 мс */ public void processmehething () {logger.debug ("MultiThreadProcessService-processSomeWething" + Thread.CurrentThread () + "...... Start"); try {thread.sleep (1000); } catch (прерывание Exception e) {бросить новое runtimeexception (e); } logger.debug ("MultiThreadProcessService-ProcessSomeWething" + Thread.CurrentThread () + "...... End"); }}MultiThreadConfig
@Configuration @componentscan (basepackages = {"com.xxx.multithread"}) @importresource (value = {"classpath: config/application-task.xml"}) @enablescheduling public class multiThreadConfig {}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.