Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Thread.ofVirtual()

Создаёт виртуальный поток — лёгкий поток, которых можно запустить миллионы.

Доступно с: Java 21

Синтаксис

public static Thread.Builder.OfVirtual ofVirtual()
public static Thread startVirtualThread(Runnable task)

Возвращаемое значение

Thread.Builder.OfVirtualПостроитель виртуальных потоков.

Примеры

Запуск виртуального потока:

void main() throws InterruptedException {
    Thread t = Thread.ofVirtual().name("worker").start(() ->
        IO.println(Thread.currentThread().getName() + " virtual=" + Thread.currentThread().isVirtual()));
    t.join();
}

Результат:

worker virtual=true

Десять тысяч потоков, каждый спит 100 мс:

void main() throws InterruptedException {
    var done = new AtomicInteger();
    List<Thread> threads = new ArrayList<>();
    for (int i = 0; i < 10_000; i++) {
        threads.add(Thread.startVirtualThread(() -> {
            try { Thread.sleep(100); } catch (InterruptedException e) { return; }
            done.incrementAndGet();
        }));
    }
    for (Thread t : threads) t.join();
    IO.println(done.get() + " tasks finished");
}

Результат:

10000 tasks finished

Примечания

Виртуальные потоки управляются JVM, а не операционной системой: пока поток ждёт (сон, сеть, файл), он не занимает системный поток. Они подходят для множества задач с ожиданием, но не ускоряют вычисления. Пулы для них не нужны — создавайте новый поток на каждую задачу, обычно через Executors.newVirtualThreadPerTaskExecutor().

См. также

  • Executors.newVirtualThreadPerTaskExecutor() — Создаёт сервис, который запускает каждую задачу в отдельном виртуальном потоке.
  • Thread — Поток выполнения: позволяет программе делать несколько дел одновременно.
  • Thread.start() — Запускает поток: его код начинает выполняться параллельно с вызывающим.

Вопросы и ответы по теме

В учебнике

  • Виртуальные потоки — Виртуальные потоки в Java 21+ — чем они отличаются от обычных, Thread.ofVirtual, newVirtualThreadPerTaskExecutor, тысячи задач сразу и ограничение через Semaphore.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.