我是否必须JNI分离附加线程?

Ron*_*hke 6 java windows java-native-interface multithreading jvm

我有一些需要调用Java的本机线程.为此,我需要使用线程将线程附加到VM AttachCurrentThread.由于此回调将经常发生,因此线程应该保持连接.AttachCurrentThread多次调用很好("尝试附加已经附加的线程是无操作的.")

DetachCurrentThread在线程退出之前我是否必须调用,是否会自动发生,或者甚至不需要?如果我必须打电话给分离会怎么样,但不是吗?它只是"泄漏",还是会破坏虚拟机状态?

我已经检查了Java Native Interface规范,但要么错过了这个,要么就是未指定.

我的问题特别适用于Windows XP上的Sun JDK 6.

kdg*_*ory 8

我认为你想要的确认是在这里:http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#wp1060

附加到VM的本机线程必须在退出之前调用DetachCurrentThread()以分离自身.

在下一节中,有理由:

VM等待,直到当前线程是实际卸载之前唯一的非守护程序用户线程.用户线程包括Java线程和附加的本机线程.