Обнаружение технологии Project Loom как отсутствующей или присутствующей JVM во время выполнения

Project Loom теперь доступен в специальных ранних сборках Java 16.

Если бы мне пришлось запускать приложение на основе Loom в реализации Java, в которой отсутствует технология Project Loom, есть ли способ обнаружить это изящно на раннем этапе запуска моего приложения?

Я хочу написать код примерно так:

      if( projectLoomIsPresent() )
{
    … proceed …
}
else
{
    System.out.println( "ERROR - Project Loom technology not present." ) ;
}

Как я могу реализовать projectLoomIsPresent()метод?

2 ответа

Способ 1:

      return System.getProperty("java.version").contains("loom");

Способ 2:

      try {
    Thread.class.getDeclaredMethod("startVirtualThread", Runnable.class);
    return true;
} catch (NoSuchMethodException e) {
    return false;
}

Вы можете проверить функции, которых не было до Project Loom:

      import java.util.Arrays;

public static boolean projectLoomIsPresent() {
    return Arrays.stream(Thread.class.getClasses())
        .map(Class::getSimpleName)
        .anyMatch(name -> name.equals("Builder"));
}

Нет необходимости перехватывать исключение:

      import java.lang.reflect.Method;
import java.util.Arrays;

public static boolean projectLoomIsPresent() {
    return Arrays.stream(Thread.class.getDeclaredMethods())
        .map(Method::getName)
        .anyMatch(name -> name.equals("startVirtualThread"));
}
Другие вопросы по тегам