【发布时间】: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