Mediumasync
Что такое @Async в Spring?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
@Async — метод выполняется в отдельном потоке, не блокируя caller. Spring создаёт proxy, отправляет в TaskExecutor.
@EnableAsync
@SpringBootApplication
public class App { /* ... */ }
@Service
public class EmailService {
@Async("asyncExecutor")
public CompletableFuture<Void> sendEmail(String to) {
// long-running: HTTP call, SMTP
return CompletableFuture.completedFuture(null);
}
}
@Bean
public TaskExecutor asyncExecutor() {
ThreadPoolTaskExecutor e = new ThreadPoolTaskExecutor();
e.setCorePoolSize(10);
e.setMaxPoolSize(100);
e.setQueueCapacity(50);
e.initialize();
return e;
}- Возвращаемые типы:
void(fire-and-forget),CompletableFuture<T>; - Self-invocation — proxy не используется, синхронный вызов;
- Только public методы;
- По умолчанию
SimpleAsyncTaskExecutor(новый поток каждый раз — bad для production); - С virtual threads (Spring Boot 3.2):
spring.threads.virtual.enabled=true.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.