【问题标题】:Do I Have to JNI Detach an Attached Thread?我必须 JNI 分离附加的线程吗?
【发布时间】:2010-12-29 02:00:54
【问题描述】:

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

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

我检查了 Java 原生接口规范,但要么错过了这一点,要么确实没有指定。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    在下一节中,有理由:

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

    【讨论】:

    • 该死,我一直在看 JDK5 JNI 规范。 “从 VM 中分离”部分是 JDK6 文档中的新增内容。感谢您的帮助!
    • 我希望有更多关于为什么它必须调用 DetachCurrentThread() 的解释。如果本机线程作为守护程序附加,则 VM 将不会等待附加的本机线程完成。
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多