Что такое TaskExecutor в Spring и как его использовать?

«Что такое TaskExecutor в Spring и как его использовать?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.

Ключевые параметры настройки: размер ядра пула, максимальный размер, очередь задач и политика отказа.