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

时间:2009-12-22 11:29:24

标签: java windows multithreading jvm java-native-interface

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

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

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

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

1 个答案:

答案 0 :(得分:8)

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

  

连接到VM的本机线程必须在退出之前调用DetachCurrentThread()以自行分离。

在下一节中,有理由:

  

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