Обнаружение технологии 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"));
}