РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
993 of 1163 menu

Класс VirtualThread

Класс VirtualThread представляет собой виртуальный поток - легковесный поток, который управляется виртуальной машиной Java, а не напрямую операционной системой. Виртуальные потоки позволяют создавать десятки и сотни тысяч потоков одновременно без существенных затрат ресурсов. Класс наследуется от Thread и был добавлен в Java 21 в рамках проекта Loom. Для создания виртуального потока обычно используются статические методы Thread.startVirtualThread или Thread.ofVirtual. В первый параметр метода startVirtualThread мы передаем задачу в виде Runnable, а метод ofVirtual возвращает builder для гибкой настройки виртуального потока.

Синтаксис

Thread.startVirtualThread(Runnable task) Thread.ofVirtual().name(String name).start(Runnable task) Thread.ofVirtual().unstarted(Runnable task)

Пример

Давайте создадим виртуальный поток с помощью метода Thread.startVirtualThread и выведем сообщение из него:

public class Main { public static void main(String[] args) throws InterruptedException { Thread thread = Thread.startVirtualThread(() -> { System.out.println("Hello from virtual thread"); }); thread.join(); System.out.println("Main thread finished"); } }

Результат выполнения кода:

"Hello from virtual thread" "Main thread finished"

Пример

Давайте создадим виртуальный поток с именем через builder Thread.ofVirtual и проверим, является ли поток виртуальным:

public class Main { public static void main(String[] args) throws InterruptedException { Thread thread = Thread.ofVirtual() .name("my-virtual-thread") .start(() -> { System.out.println("Running in virtual thread"); }); thread.join(); System.out.println("Name: " + thread.getName()); System.out.println("Is virtual: " + thread.isVirtual()); } }

Результат выполнения кода:

"Running in virtual thread" "Name: my-virtual-thread" "Is virtual: true"

Пример

Давайте запустим несколько виртуальных потоков и соберем результаты их работы в список:

import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws InterruptedException { List<String> res = new ArrayList<>(); List<Thread> threads = new ArrayList<>(); for (int i = 1; i <= 5; i++) { int num = i; Thread t = Thread.ofVirtual() .name("vt-" + num) .start(() -> { synchronized (res) { res.add("thread-" + num); } }); threads.add(t); } for (Thread t : threads) { t.join(); } System.out.println(res); } }

Результат выполнения кода:

[thread-1, thread-2, thread-3, thread-4, thread-5]

Смотрите также

  • метод startVirtualThread,
    который запускает виртуальный поток
  • метод ofVirtual,
    который возвращает builder виртуальных потоков
  • метод isVirtual,
    который проверяет, является ли поток виртуальным
  • класс Thread,
    который представляет обычный поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить