当前位置: 首页 > 知识库问答 >
问题:

调用多线程C代码时,JNI工作正常吗?[闭门]

颜华池
2023-03-14

我试图决定JNI是否适合我们的用例。

我们有一个用C编写的库,它使用多个线程从数据库/RPC获取数据,我们希望创建一个包装器,让Java代码能够调用它。

我不熟悉JNI,所以我想知道在这种情况下C多线程是否仍能正常工作。

谢谢

共有1个答案

百里沛
2023-03-14

我看不出这两个方向有什么重大问题。除非你有非常具体的东西。

下面是从多个线程调用JNI代码的示例:

http://jnicookbook.owsiak.org/recipe-No-024/

下面是从多个C线程调用Java的示例:

http://jnicookbook.owsiak.org/recipe-no-027/

 类似资料:
  • 我试图理解如果下面是线程安全的,它是由另一个开发人员编写的代码,我已经继承和不再与我们在一起。 我有一个BaseProvider类,它实际上是一个消息缓存,由LinkedBlockingQueue表示。该类将传入的消息存储在队列中。 我有一组读此队列的辅助线程。因此,LinkedBlockingQueue是线程安全的。 正如您所注意到的,每个辅助线程都可以访问所有的提供者,所以当一个辅助线程遍历所

  • 问题内容: 我有一个从C调用的Java函数的JNI包装器。我试图从不同的线程调用某些方法,并且在尝试获取JNIEnv指针的新副本时收到错误消息。下面使用m并在每种方法中调用它: 从主线程/初始线程调用JVM时,该JVM已被实例化,并且该(和其他方法)运行。当我获得envRes的值时,在子线程中它保持-2。 问题答案: 请参阅本章的文档。 在使用任何JNI函数之前,您至少需要为每个本机线程调用一次。

  • 我刚刚开始学习c#中的线程和方法调用,但我遇到了一个无法解决的问题。 我做了一个基本的C#表单程序,通过启动一个线程和调用委托,不断更新和显示一个数字。 在Form1_load开始新的线程: Public void始终显示此消息(该消息会不断更新号码): 现在,当我单击表单的X按钮时,出现以下异常: 类型System的未处理异常。发生在System.窗户。Forms.dll 无法更新已删除对象的

  • 问题内容: sleep()是Thread类的静态方法。从多个线程调用时,它是如何工作的。以及如何找出当前的执行线程。? 或者可能是更通用的问题?如何从不同线程调用静态方法?不会有并发问题吗? 问题答案: 如何找出当前的执行线程? 不必。它仅调用操作系统,该操作系统始终使调用它的线程休眠。

  • 问题内容: 虽然我可以使用Java代码的Eclipse JDT调试器和C代码的GDB调试应用程序,但我还是希望使用单个工具进行所有调试。我找到了几个在Eclipse中启用“混合模式”调试的项目,其中包括对Java和本机代码之间的单步执行的支持。 英特尔针对Java / JNI环境的集成调试器 Mariot Chauvin的“代码之夏”项目:支持JDT和CDT之间的无缝调试 不幸的是,其中一个声称是

  • 问题内容: 我知道Java代码可以通过JNI调用C 代码。但是,是否可以通过JNI或其他方法再次从C 调用Java代码? 问题答案: 是的,您当然可以。这是一个例子: 这是java文件: 还有一些使用它的C ++: