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与线程相关。