Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpVtFct 192 of 322 menu
◀ ▶

Сборка виртуального потока в Java

Когда одной строки startVirtualThread мало, используют фабрику Thread.ofVirtual(). Она возвращает настраиваемый builder: можно задать имя, получить ещё не запущенный Thread или сразу вызвать start с задачей.

Имя помогает в логах и дампах потоков, особенно когда виртуальных задач тысячи. Метод name принимает строку, unstarted создаёт поток без вызова start, start(Runnable) объединяет создание и запуск.

Поток с заданным именем и отложенным стартом:

public class Main { public static void main(String[] args) throws InterruptedException { Thread worker = Thread.ofVirtual() .name("fetch-7") .unstarted(() -> System.out.println(Thread.currentThread().getName())); System.out.println("before start"); worker.start(); worker.join(); } }

Сначала печатается before start, затем имя fetch-7 из задачи. Без unstarted задача могла бы начаться раньше, чем главный поток дойдёт до своей строки лога.

Тот же builder в одну цепочку со стартом:

public class Main { public static void main(String[] args) throws InterruptedException { Thread v = Thread.ofVirtual() .name("worker-a") .start(() -> System.out.println("alive")); v.join(); } }

Для платформенных потоков есть параллельная фабрика Thread.ofPlatform() с похожим API. Виртуальная ветка всегда создаёт лёгкий поток, проверка isVirtual() после старта вернёт true.

Соберите виртуальный поток с именем "io-1", запустите его вручную и выведите из задачи isVirtual().

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить