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

时间:2012-06-06 06:53:37

标签: java multithreading java-native-interface

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

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

1 个答案:

答案 0 :(得分:1)

引用JNI Specification

  

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

keep a live reference to the underlying class, or

recompute the method or field ID
     

如果打算长时间使用方法或字段ID   时间。