Java 由不同的类加载器加载的相同本机库 请考虑以下情况:

Java 由不同的类加载器加载的相同本机库 请考虑以下情况:,java,java-native-interface,classloader,Java,Java Native Interface,Classloader,我有两个java类,使用不同的系统类装入器装入。我有一个实现了队列的本机库。这两个类将加载相同的库,并向队列中添加元素。可能吗?如果是这样,本机库实现会在两个类之间共享吗?根据 在JDK中,每个类装入器管理自己的一组本机库同一JNI本机库不能加载到多个类加载程序中。这样做会导致抛出未满足的linkerror。例如,System.loadLibrary在用于将本机库加载到两个类加载器中时抛出一个unsatifiedlinkerror 只有当我再次尝试加载库时,才会发生错误。正确的?我可以从另一个类

我有两个java类,使用不同的系统类装入器装入。我有一个实现了队列的本机库。这两个类将加载相同的库,并向队列中添加元素。可能吗?如果是这样,本机库实现会在两个类之间共享吗?

根据

在JDK中,每个类装入器管理自己的一组本机库同一JNI本机库不能加载到多个类加载程序中。这样做会导致抛出
未满足的linkerror
。例如,
System.loadLibrary
在用于将本机库加载到两个类加载器中时抛出一个
unsatifiedlinkerror


只有当我再次尝试加载库时,才会发生错误。正确的?我可以从另一个类加载器调用库中的方法吗?我认为下面的一段稍微回答了这个问题:“此外,当本地库的相应类加载器被垃圾收集时,可以卸载它们”。因此,这意味着如果要跨不同的类加载器使用该库,可能会卸载本机库,这将是一个问题。@maba JNI规范第5.2节“库和版本管理”一方面说:加载本机库后,所有类加载器都可以看到它本机方法可以轻松地混合来自不同类装入器的类这打破了类加载器提供的名称空间分隔。”另一方面,它说:“每个类加载器管理自己的一组本机库。”本机库无法轻松混合来自不同类加载器的类基于类加载器的名称空间分隔保留在本机库中。“这不是很矛盾吗?@user1494080第2条语句似乎是正确的。我在1个类加载器中加载了一个库。在尝试使用来自其他类加载器的本机调用时,抛出了一个“UnsatisfiedLinkError”。