【问题标题】:JNI - automatically attach all newly spawned threads from process to JVM?JNI - 自动将所有新生成的线程从进程附加到JVM?
【发布时间】:2011-04-13 11:16:39
【问题描述】:

我使用 JNI 从 Java 调用 dll。 DLL 调用另一个第三方库,该库产生一堆线程并向我的 dll 发送回调。我希望将这些回调附加到 JVM。做这个的最好方式是什么?我想既然线程调用了回调方法,那么回调并没有附加到JVM,所以我必须附加它?

难道没有……继承,好像这个线程创建的所有线程都会自动附加到JVM上?

我查看了文档,但找不到。

谢谢

【问题讨论】:

    标签: java c++ multithreading dll java-native-interface


    【解决方案1】:

    您必须从需要调用 VM 的每个线程手动调用 AttachCurrentThread()(和 DetachCurrentThread())。没有自动机制。

    【讨论】:

    • 有没有办法检查当前线程是否已附加,例如 isAttached() 之类的?
    • @KaiserJohaan:不,但是多次连接非常安全,即使多次连接也只需要一个 Detach。
    • 你知道它是在内部检查线程是否已经连接,还是重新连接它?我只是想知道是否有一些性能影响
    • 根据download.oracle.com/javase/1.5.0/docs/guide/jni/spec/…,任何额外的附加都是无用的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2016-11-12
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多