Ответ
TaskExecutor — это интерфейс в Spring Framework, абстрагирующий выполнение задач. Он является частью Spring для управления потоками и асинхронным выполнением, часто используя пулы потоков.
Зачем он нужен?
- Упрощает асинхронное выполнение кода.
- Позволяет централизованно управлять конфигурацией пула потоков.
- Интегрируется с аннотацией
@Async.
Пример настройки в Spring Boot:
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
executor.setThreadNamePrefix("Async-");
executor.initialize();
return executor;
}
}
Использование с @Async:
@Service
public class NotificationService {
@Async // Метод выполнится в отдельном потоке из TaskExecutor
public void sendAsyncNotification(String message) {
// Логика отправки уведомления
}
}
Основные реализации:
ThreadPoolTaskExecutor— наиболее распространённый, основан наThreadPoolExecutor.SimpleAsyncTaskExecutor— создаёт новый поток для каждой задачи (не для продакшена).ConcurrentTaskExecutor— обёртка вокруг стандартногоjava.util.concurrent.Executor.
Ключевые параметры настройки: размер ядра пула, максимальный размер, очередь задач и политика отказа.