3

Project Loom现在可以在Java 16的特殊早期版本中使用。

如果我要在缺少 Project Loom 技术的 Java 实现上运行基于 Loom 的应用程序,有没有办法在我的应用程序启动的早期优雅地检测到这一点?

我想写这样的代码:

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

我该如何实现一个projectLoomIsPresent()方法?

4

2 回答 2

2

方法一:

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

方法二:

try {
    Thread.class.getDeclaredMethod("startVirtualThread", Runnable.class);
    return true;
} catch (NoSuchMethodException e) {
    return false;
}
于 2020-12-17T04:58:14.983 回答
2

您可以检查 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"));
}
于 2020-12-17T01:07:12.263 回答