Создание виртуального потока в Java
Виртуальный поток создают так же, как обычную задачу
для Runnable, но стартуют через специальные
статические методы Thread. Самый короткий
путь: передать лямбду в Thread.startVirtualThread,
получить объект Thread и при необходимости
дождаться конца через join.
Метод сразу ставит задачу на выполнение. Объект
возвращается живым, поэтому главный поток может
синхронизироваться с фоном так же, как с
платформенным Thread.
Минимальный пример с выводом имени и флага
isVirtual:
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread v = Thread.startVirtualThread(() -> {
Thread self = Thread.currentThread();
System.out.println(self.getName() + " virtual=" + self.isVirtual());
});
v.join();
System.out.println("done");
}
}
Имя по умолчанию JVM выдаёт сама, часто с префиксом
вроде VirtualThread-#. После join
в консоли появится done: главный поток
дождался завершения виртуального.
Если поток нужен без немедленного старта, позже
воспользуемся фабрикой Thread.ofVirtual()
и методом unstarted. Для простых сценариев
достаточно startVirtualThread и явного
ожидания там, где важен порядок шагов.
Запустите виртуальный поток, который печатает
"ping". В main вызовите join
и затем выведите "pong". Убедитесь, что
"ping" всегда идёт раньше "pong".