Jat*_*ani 7 c++ java java-native-interface multithreading pthreads
当我们使用 AttachCurrentThread (JavaVM *vm, void **p_env, void *thr_args) 方法将 Cpp 线程附加到 Java 本机接口 (JNI) 时,从 Java 虚拟机的角度来看,C++ 线程实际上变成了外部线程( JVM)。
将本机 Cpp 线程附加到 JVM 后,如果我在附加线程上执行 pthread_join,或者附加线程在从 JVM 分离之前突然终止,是否会出现问题?
我的理解是,当使用 AttachCurrentThread 将本机线程附加到 JVM 时,JVM 会分配某些资源并维护内部数据结构来管理线程与 Java 对象的交互。如果线程在没有正确分离的情况下突然终止,这些资源可能无法释放,并可能导致内存泄漏或其他资源或 JVM 相关问题。
在上面的代码中,DeattachCurrentThread 变得无法访问,并且我已经执行了 pthread_exit (),这会导致与内存泄漏或任何其他问题相关的问题吗?
使用 JNI 的 AttachCurrentThread 方法在已附加到 JVM 的线程上执行 pthread_join 是否安全
没有特别的理由不这么认为。Java 和 JNI 没有比任何其他代码更多的方法来干扰线程。
另请注意,JNI 规范要求附加到 JVM 的线程在终止之前再次自行分离。在这样的分离之后,尤其没有理由认为线程会表现出与 pthread 不一致的任何行为。