Java 多线程调用 C++ dll
2009-08-17 17:58
162 查看
前段时间到一个公司工作。在工作期间,需要给公司解决一个java调用dll的问题,该公司以前的java掉用dll存在一个多线程的问题。
经过一天多的思考和分析。得出解决办法。以下是我对这个问题的一些想法。
1。 该dll中定义了许多全局变量,并且每回要调用dll时都要根据调用端的情况来初始化这些全局变量。所以当多线程调用时,就会出现数据混乱。因为全局变量在一个进程中是共享的。
2。第二个问题是: JNIEnv指针不能直接在多线程中共享使用。
第一个的问题的解决的方法:做一个线程池管理类:每个线程调用中的全局进行管理。
第二个问题的解决方法:JNIEnv *env指针不可为多个线程共用,但是java虚拟机的JavaVM指针是整个jvm公用的,我们可以通过JavaVM来得到当前线程的JNIEnv指针.对每一个调用的线程产生一个临时的JNIEnv指针拷贝。
经过一天多的思考和分析。得出解决办法。以下是我对这个问题的一些想法。
1。 该dll中定义了许多全局变量,并且每回要调用dll时都要根据调用端的情况来初始化这些全局变量。所以当多线程调用时,就会出现数据混乱。因为全局变量在一个进程中是共享的。
2。第二个问题是: JNIEnv指针不能直接在多线程中共享使用。
第一个的问题的解决的方法:做一个线程池管理类:每个线程调用中的全局进行管理。
第二个问题的解决方法:JNIEnv *env指针不可为多个线程共用,但是java虚拟机的JavaVM指针是整个jvm公用的,我们可以通过JavaVM来得到当前线程的JNIEnv指针.对每一个调用的线程产生一个临时的JNIEnv指针拷贝。
相关文章推荐
- java调用C/C++生成的dll动态链接库----借助JNI
- java 中System.loadLibrary()调用c++Dll的路径问题
- java调用C/C++写的库函数 dll
- java调用c++生成的dll
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- c++ c# java 调用 c++ 写的dll
- Java调用C/C++实现的DLL动态库——JNI
- Java采用JNI调用VC++生成的dll(Java与C++交互)
- [2014.1.31] Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- Java调用C/C++实现的DLL动态库——JNI(转)
- JAVA技巧(Java中调用C/C++生成的DLL)
- JAVA 与C++ 混合编程 Java中调用C/C++生成的DLL
- 如何使用java调用DLL运行C++(初篇)
- Java JNI 调用C/C++ 本地库(dll/so)
- Java通过C++调用 C# DLL
- 0072 JAVA JNI 如何调用C或者C++生成的dll【基础】
- JAVA中利用JNI与VS2012实现C/C++的DLL调用
- java调用CC++编写的DLL文件问题
- Java採用JNI调用VC++生成的dll(Java与C++交互)
- java调用c++的第三方dll动态库详解