Проблемы с попыткой использовать Project Loom/Virtual Threads с OpenJDK 19-loom JAVA

Я пытаюсь протестировать проект эталонного ткацкого станка виртуальных потоков на Java и использую следующую версию JDK 19-loom:

        package com;

import java.util.concurrent.ThreadFactory;

    public class a {
    
    
        public static void main (String [] args) throws Exception{
            Runnable printThread = () -> System.out.println(Thread.currentThread());
    
            ThreadFactory virtualThreadFactory = Thread.builder().virtual().factory();
            ThreadFactory kernelThreadFactory = Thread.builder().factory();
    
            Thread virtualThread = virtualThreadFactory.newThread(printThread);
            Thread kernelThread = kernelThreadFactory.newThread(printThread);
    
            virtualThread.start();
            kernelThread.start();
    
        }
    }

И у меня есть следующая конфигурация IntelliJ:

Но у меня возникает следующая ошибка:

И похоже, что создатель треда не идентифицирован

Я хотел бы знать, что еще мне нужно?

1 ответ

Вы используете устаревший пример.

С текущим состоянием Loom ваш пример должен выглядеть так:

      public static void main(String[] args) throws InterruptedException {
    Runnable printThread = () -> System.out.println(Thread.currentThread());

    ThreadFactory virtualThreadFactory = Thread.ofVirtual().factory();
    ThreadFactory kernelThreadFactory = Thread.ofPlatform().factory();

    Thread virtualThread = virtualThreadFactory.newThread(printThread);
    Thread kernelThread = kernelThreadFactory.newThread(printThread);

    virtualThread.start();
    kernelThread.start();

    virtualThread.join();
    kernelThread.join();
}

но вы также можете использовать упрощенный

      public static void main(String[] args) throws InterruptedException {
    Runnable printThread = () -> System.out.println(Thread.currentThread());

    Thread virtualThread = Thread.startVirtualThread(printThread);
    Thread kernelThread = Thread.ofPlatform().start(printThread);

    virtualThread.join();
    kernelThread.join();
}

Имейте в виду, что это незавершенная работа, и документы могут устареть довольно быстро.

Другие вопросы по тегам