【问题标题】:Java app does not start a thread when called from C (JNI) DLL从 C (JNI) DLL 调用时,Java 应用程序不启动线程
【发布时间】:2014-12-17 12:46:49
【问题描述】:

我创建了一个 java 库,其中启动了一个线程。

当使用普通的 java-main 方法测试这个库并调用该库时,有问题的线程可以正常启动。

但现在我想通过 JNI 从 C dll 调用这个库。

1) 所以,C dll 通过 JNI 调用库方法foo

2) foo 创建一个 java 线程并在其上调用 start

3) foo 返回 C dll 调用者。

4) Java 线程现在开始

问题是我从线程中得到了一个Future,然后我调用了get

当从 C dll 调用 java 代码时,get 会永远阻塞,但从另一个 java 应用程序调用时可以正常工作。

所有其他代码都可以使用 JNI 运行。

有什么想法会发生这种情况吗?

dll 或 JNI 是否以某种方式阻止了 java 线程的创建?

【问题讨论】:

    标签: java multithreading dll java-native-interface


    【解决方案1】:

    如果有人遇到类似问题:

    问题是我创建了对 dll 的本机回调。

    从创建的线程调用此回调,并且不允许在本机代码上进行多线程。

    删除从线程到本机代码的所有调用解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多