在运行时将 Project Loom 技术检测为缺失或存在 JVM
Detect Project Loom technology as missing or present JVM at runtime
Project Loom is now available in special early-release builds Java 16.
如果我要 运行 我的基于 Loom 的应用程序在 Java 实现上缺少 Project Loom 技术,有没有办法在我的应用程序启动的早期优雅地检测到它?
我想写这样的代码:
if( projectLoomIsPresent() )
{
… proceed …
}
else
{
System.out.println( "ERROR - Project Loom technology not present." ) ;
}
我如何实施 projectLoomIsPresent()
方法?
您可以检查 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"));
}
方法一:
return System.getProperty("java.version").contains("loom");
方法二:
try {
Thread.class.getDeclaredMethod("startVirtualThread", Runnable.class);
return true;
} catch (NoSuchMethodException e) {
return false;
}
Project Loom is now available in special early-release builds Java 16.
如果我要 运行 我的基于 Loom 的应用程序在 Java 实现上缺少 Project Loom 技术,有没有办法在我的应用程序启动的早期优雅地检测到它?
我想写这样的代码:
if( projectLoomIsPresent() )
{
… proceed …
}
else
{
System.out.println( "ERROR - Project Loom technology not present." ) ;
}
我如何实施 projectLoomIsPresent()
方法?
您可以检查 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"));
}
方法一:
return System.getProperty("java.version").contains("loom");
方法二:
try {
Thread.class.getDeclaredMethod("startVirtualThread", Runnable.class);
return true;
} catch (NoSuchMethodException e) {
return false;
}