TGViewer
Java Books Java Books @java_library · 14.2K subscribers
Post #772 2.53K
☕️ Java-совет: не запускайте блокирующий I/O через `CompletableFuture` без собственного пула

Такой код выглядит асинхронным:


CompletableFuture<User> future =
CompletableFuture.supplyAsync(() -> userClient.loadUser(id));


Но без явного Executor задача обычно попадёт в общий ForkJoinPool.commonPool().

Если loadUser() ждёт HTTP, базу данных или файловую систему, поток блокируется. Несколько медленных вызовов могут занять весь общий пул и затормозить совершенно несвязанные операции приложения.

Лучше выделить отдельный пул для блокирующего I/O:


private static final ExecutorService IO_POOL =
Executors.newFixedThreadPool(32);

CompletableFuture<User> future =
CompletableFuture.supplyAsync(
() -> userClient.loadUser(id),
IO_POOL
);


И не забыть корректно его закрыть:


IO_POOL.shutdown();


Для цепочки тоже важно явно выбирать executor:


future.thenApplyAsync(
user -> enrichUser(user),
IO_POOL
);


Почему это полезно:

- медленный внешний сервис не блокирует общий пул;
- нагрузку можно ограничить размером executor;
- проще наблюдать очередь и время выполнения;
- разные типы задач не мешают друг другу.

CompletableFuture не делает блокирующий код неблокирующим. Он лишь переносит ожидание в другой поток.

Асинхронность без контроля executor - это просто блокировка в менее заметном месте.
  • ❤ 5
  • 👍 4
  • 🔥 2
More from @java_library
  1. Sep 15, 2026Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском Kafka обучение…
  2. Sep 12, 2026🖥 Java в 2026 году: 25 лучших практических примеров кода от основ до многопоточности http…
  3. Sep 10, 2026☕ Java: в HashSet всего 10 элементов, а обход всё равно тормозит Редкий нюанс: время обход…
  4. Sep 10, 2026🔥 Python + AI без игрушечных демок. Курс для тех, кто хочет собирать рабочие системы. Ste…
  5. Sep 7, 2026☕️ Java получил практический MCP-сервер для медицинского AI-триажа На JavaOne показали сис…
  6. Sep 6, 2026Apache Kafka 4.x - продвинутый бесплатный практический курс 2026 года https://github.com/j…
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 →