我有一些需要调用Java的本机线程。为此,我需要使用AttachCurrentThread
将线程附加到VM。由于此回调将经常发生,因此线程应该保持连接。多次调用AttachCurrentThread
很好(“尝试附加已经附加的线程是无操作的。”)
我必须在线程退出之前调用DetachCurrentThread
,它会自动发生,还是甚至不需要?如果我必须打电话给分离会怎么样,但不是吗?它只会“泄漏”,还是会破坏虚拟机状态?
我已经检查过Java Native Interface规范,但要么错过了这个,要么就是未指定。
我的问题特别适用于Windows XP上的Sun JDK 6.
答案 0 :(得分:8)
我认为你想要的确认是:http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#wp1060
连接到VM的本机线程必须在退出之前调用DetachCurrentThread()以自行分离。
在下一节中,有理由:
VM在实际卸载之前等待当前线程是唯一的非守护程序用户线程。用户线程包括Java线程和附加的本机线程。