TGViewer
Библиотека джависта | Java, Spring, Maven, Hibernate Библиотека джависта | Java, Spring, Maven, Hibernate @javaproglib · 22K subscribers
Post #7455 3.25K
⏳ Как работает @Async в Spring?

Spring позволяет выполнять методы асинхронно с помощью аннотации @Async. Это один из самых простых способов разгрузить основной поток и не блокировать выполнение.

🔧 Как включить

Добавь @EnableAsync на конфигурационный класс (или на @SpringBootApplication). Без этого @Async работать не будет:
@EnableAsync
@SpringBootApplication
public class App { ... }


Затем помечаешь нужный метод:
@Async
public void sendEmail(String to) {
// выполнится в отдельном потоке
}


🔍 Что под капотом

Spring создаёт AOP-прокси вокруг бина. При вызове @Async-метода прокси перехватывает вызов и отправляет задачу в TaskExecutor (по умолчанию — SimpleAsyncTaskExecutor, который создаёт новый поток на каждый вызов).

Шаги:

1. Вызов метода перехватывается прокси (AsyncExecutionInterceptor)
2. Метод оборачивается в Callable / Runnable
3. Задача отправляется в Executor
4. Вызывающий поток сразу получает управление обратно

📦 Возвращаемые типы

▪️ void
▪️ Future<T>
▪️ CompletableFuture<T>

⚙️ Свой Executor


SimpleAsyncTaskExecutor — плохой выбор для прода, т.к. не переиспользует потоки. Настрой пул:
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("async-");
executor.initialize();
return executor;
}


Или укажи конкретный executor прямо в аннотации:
@Async("taskExecutor")
public void process() { ... }


⚠️ Нюансы

— @Async не работает при вызове метода внутри того же класса (та же проблема, что с @Transactional)
— Метод должен быть public
— Исключения из void-методов тихо проглатываются — нужно настроить AsyncUncaughtExceptionHandler
— При CompletableFuture исключение попадёт в объект и его можно обработать через .exceptionally(...)

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • 👍 11
  • 🔥 2
  • 🤔 2
  • ❤ 1
More from @javaproglib
  1. Oct 17, 2026☕️ Скользящие окна в Stream без ручного буфера Нужно сравнить соседние измерения или обраб…
  2. Oct 16, 2026🧑‍💻 Какие навыки помогают вам в разработке в 2026 году? Что вы чаще используете в работе…
  3. Oct 16, 2026🧩 Неизменяемый список всё ещё может измениться Collections.unmodifiableList() запрещает м…
  4. Oct 15, 2026💡 Logpoints: логи без правки кода и нового деплоя Чтобы увидеть значение переменной, необ…
  5. Oct 14, 2026Post #7897
  6. Oct 14, 2026Почему разработчик планирует отдавать больше задач Claude Винсент Шмальбах описал план пер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →