有没有单个 Java 进程加载多份 jni 的方式

2022-09-24 11:07:30 +08:00
 fanxasy
项目中需要通过 jni 调用动态库,有单个 java 进程并行调用 jni 逻辑的需求,而动态库内是线程不安全的单线程逻辑且动态库没法改,请问各位有没有解决办法
1983 次点击
所在节点    Java
7 条回复
v2eb
2022-09-24 11:16:26 +08:00
串行
darkengine
2022-09-24 13:00:03 +08:00
试下从 classloader 入手?

自定义 ClassLoader 实现隔离运行多版本 jar 包的方式:

http://kentt.top/2017/06/14/classLoader-jar/
Keyi
2022-09-24 15:49:19 +08:00
多进程?
fanxasy
2022-09-24 15:53:17 +08:00
@darkengine 结合源码看了下,感觉有机会成,我试试
fanxasy
2022-09-24 20:46:29 +08:00
@darkengine 有一个 static Vector<String> loadedLibraryNames 存放已加载的库名,不允许在不同的 classloader 实例去加载相同的库
pursuer
2022-09-24 22:30:16 +08:00
通常操作系统不支持同名动态库重名加载,可以看下动态库改名是否行得通,不过也可能还会有符号冲突,还有一种方案是网上找定制开发的动态库加载器
darkengine
2022-09-24 22:57:57 +08:00
@fanxasy 我也没实践过呢,按照这个 https://stackoverflow.com/questions/16189217/same-native-library-loaded-by-different-class-loader 说的,看来是不能实现的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX