Java 我必须拆开连接的线程吗?

Java 我必须拆开连接的线程吗?,java,windows,multithreading,jvm,java-native-interface,Java,Windows,Multithreading,Jvm,Java Native Interface,我有一些本机线程需要调用到Java中。为此,我需要使用AttachCurrentThread将线程附加到VM。由于这种回调会经常发生,因此线程应该保持连接状态。多次调用AttachCurrentThread是可以的(“尝试附加已附加的线程是不允许的”) 我是否必须在线程退出之前调用DetachCurrentThread,它是自动发生的,还是甚至不是必需的?如果我必须调用detach,但不调用,会发生什么?它只是“泄漏”,还是会破坏VM状态 我已经检查了Java本机接口规范,但要么没有检查到,要么

我有一些本机线程需要调用到Java中。为此,我需要使用
AttachCurrentThread
将线程附加到VM。由于这种回调会经常发生,因此线程应该保持连接状态。多次调用
AttachCurrentThread
是可以的(“尝试附加已附加的线程是不允许的”)

我是否必须在线程退出之前调用
DetachCurrentThread
,它是自动发生的,还是甚至不是必需的?如果我必须调用detach,但不调用,会发生什么?它只是“泄漏”,还是会破坏VM状态

我已经检查了Java本机接口规范,但要么没有检查到,要么确实没有指定


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

我认为您需要的确认信息如下:

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

在下一节中,有一个基本原理:

VM等待当前线程成为唯一的非守护进程用户线程,然后才实际卸载。用户线程包括Java线程和附加的本机线程


该死,我一直在看JDK5 JNI规范。“从VM分离”部分是JDK6文档中新增的。谢谢你的帮助!我希望有更多关于它为什么必须调用DetachCurrentThread()的解释。如果本机线程作为守护进程连接,那么VM不会等待连接的本机线程完成。