关于多线程访问本地DLL的问题,超BT问题。。。

不好意思,标题上不加点噱头很难吸引高手的眼光啊,不过这个题目绝对让您不枉此行。

[color=blue]基本情况:[/color]

通过JNI调用本地DLL实现一个功能,程序结构:工作类->包装类(Caller)->JNI接口->DLL文件。

JNI接口类里的方法都是同步方法,加了synchronized。包装类里通过单例模式保证只有一个JNI接口类实例。

Java程序和DLL功能之间传递的参数为byte[]。

[color=blue]问题:[/color]

工作类用单线程访问包装类里的功能方法时,没有任何问题,调用多少次都没有问题。

工作类中用多线程访问(即使是同步访问)时,第一个线程第一次调用成功,其他线程一调用JVM就抛出异常(具体信息附后)。

[color=blue]请问:[/color]

1.为什么即使通过同步来保证多线程访问DLL功能是顺序串行发生的,仍然和单线程访问不同?

2.用什么办法解决这个问题可以保证程序的性能?

3.单独运行一个进程提供DLL中的功能,用进程间通讯的方式是不是可以解决?

谢谢!


[color=green]异常信息:
# 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
#[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值