Ответ
Project Loom (включен в Java 19+ как инкубационный модуль, а затем как предварительная версия) — технология для упрощения высококонкурентного программирования за счет виртуальных потоков (virtual threads).
Суть проблемы: Классические потоки (platform threads) Java тяжеловесны и ограничены ресурсами ОС (обычно тысячи). Это создает сложности для сервисов с большим количеством одновременных I/O-операций (HTTP-запросы, работа с БД).
Решение Loom: Виртуальные потоки — это легковесные потоки, управляемые JVM, а не ОС. Их можно создавать в огромных количествах (миллионы).
Пример: обработка 10 000 одновременных запросов.
// Создание ExecutorService на виртуальных потоках
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 0; i < 10_000; i++) {
futures.add(executor.submit(() -> {
// Имитация блокирующей I/O-операции (например, запрос к БД)
Thread.sleep(Duration.ofSeconds(1));
return i;
}));
}
// Все задачи выполнятся конкурентно примерно за 1 секунду,
// а не за 10 000 секунд, как в случае с пулом из 10 платформенных потоков.
}
Ключевые преимущества:
- Масштабируемость: Возможность создавать миллионы потоков для блокирующих операций.
- Упрощение кода: Позволяет писать простой, синхронный, блокирующий код, который под капотом эффективно масштабируется. Отпадает необходимость в сложных асинхронных API (CompletableFuture, Reactive Streams) для многих сценариев.
- Совместимость: Виртуальные потоки — это все те же объекты
java.lang.Thread. Большинство существующих библиотек и код будут работать без изменений.
Идеально подходит для: высоконагруженных веб-серверов, микросервисов, обработчиков, которые часто ожидают ответов от других сервисов или БД.