【问题标题】:Does JNI work properly when calling multi-threaded C++ code? [closed]调用多线程 C++ 代码时 JNI 是否正常工作? [关闭]
【发布时间】:2019-08-27 05:08:49
【问题描述】:

我正在尝试确定 JNI 是否适用于我们的用例。

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

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

谢谢。

【问题讨论】:

  • 嘿,我在互联网上找不到答案。如果你想关闭,介意帮我完善这个问题吗?
  • 多个本机线程不是问题。但是你不能跨线程共享相同的JNIEnv*(参见例如this)。
  • 谢谢 Michael,我们不会对 Java 代码中的线程做任何事情,只是返回结果。
  • 理论上这可以正常工作,但是,我在实践中遇到了很多问题。在本地线程实现和 JVM 之间提供线程安全是非常困难的,并且几乎不可能调试由此产生的问题。我强烈建议将并发保留在一侧或另一侧,根据我的经验,将其保留在 java 端会更容易一些。
  • @AlexBarker 谢谢亚历克斯。线程安全对我们来说不应该是一个问题,因为在 C++ 和 Java 代码之间传递的所有东西都是一些 protobuf 对象,除此之外没有跨代码的交互。所以我想在这种情况下,双方都可以并发?

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


【解决方案1】:

我认为这两个方向都没有任何重大问题。除非你有真正具体的东西。

这里有从多个线程调用 JNI 代码的示例:

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

这里有从多个 C 线程调用 Java 的示例:

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

【讨论】:

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