Java 在一个线程上初始化的JMethod可以在另一个线程中使用吗?

Java 在一个线程上初始化的JMethod可以在另一个线程中使用吗?,java,multithreading,java-native-interface,Java,Multithreading,Java Native Interface,我们可以在另一个线程的一个线程上使用jmethodID初始化吗?我问这个问题是因为当我运行jni程序时,我的jvm崩溃了,在这个程序中,我在一个线程上初始化了jmethodID,并在另一个线程中使用它。我在想这是否是一个原因 通过在顶部声明,我将jmethodID保留为一个全局变量。然后在其中一个调用中我初始化它,并在随后的调用中尝试重用它。引用: 字段或方法ID不会阻止VM卸载该类 从中派生ID。卸载类后 方法或字段ID无效。因此,本机代码必须 确保: keep a live referenc

我们可以在另一个线程的一个线程上使用
jmethodID
初始化吗?我问这个问题是因为当我运行jni程序时,我的jvm崩溃了,在这个程序中,我在一个线程上初始化了
jmethodID
,并在另一个线程中使用它。我在想这是否是一个原因

通过在顶部声明,我将
jmethodID
保留为一个全局变量。然后在其中一个调用中我初始化它,并在随后的调用中尝试重用它。

引用:

字段或方法ID不会阻止VM卸载该类 从中派生ID。卸载类后 方法或字段ID无效。因此,本机代码必须 确保:

keep a live reference to the underlying class, or

recompute the method or field ID
如果它打算在一段较长的时间内使用方法或字段ID 时间


@SuhailGupta表示“打算在较长时间内使用方法或字段ID”。当然,这是显而易见的?我的意思是在两次调用之间说。@SuhailGupta从我引用的内容中应该非常清楚,答案是“否”,如果您希望答案是“是”,那么需要采取什么行动。这个答案与线程无关,它与jclass对象的生存期有关。@fuzzyTew与线程相关。