您的位置:首页 > 编程语言 > C语言/C++

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指针拷贝。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: