浏览 123 次
|
该帖已经被评为隐藏帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-30 关键字: 多线程 jni
不好意思,标题上不加点噱头很难吸引高手的眼光啊,不过这个题目绝对让您不枉此行。
基本情况: 通过JNI调用本地DLL实现一个功能,程序结构:工作类->包装类(Caller)->JNI接口->DLL文件。 JNI接口类里的方法都是同步方法,加了synchronized。包装类里通过单例模式保证只有一个JNI接口类实例。 Java程序和DLL功能之间传递的参数为byte[]。 问题: 工作类用单线程访问包装类里的功能方法时,没有任何问题,调用多少次都没有问题。 工作类中用多线程访问(即使是同步访问)时,第一个线程第一次调用成功,其他线程一调用JVM就抛出异常(具体信息附后)。 请问: 1.为什么即使通过同步来保证多线程访问DLL功能是顺序串行发生的,仍然和单线程访问不同? 2.用什么办法解决这个问题可以保证程序的性能? 3.单独运行一个进程提供DLL中的功能,用进程间通讯的方式是不是可以解决? 谢谢! 异常信息: # An unexpected error has been detected by Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x030094c1, pid=11008, tid=13224 # # Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing) # Problematic frame: # C [HLSSplit.dll+0x294c1] # # An error report file with more information is saved as hs_err_pid11008.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


