在多线程环境中调用native方法

本文描述了在多线程Java程序中调用native方法遇到的问题及解决办法。当在子线程中调用MD5运算的dll时,程序意外终止。通过阅读《JAVA线程》并尝试将native方法声明为`synchronized static`,问题依然存在。最终发现dll应在主线程中加载,而native方法可在子线程中调用,以此避免线程问题。
摘要由CSDN通过智能技术生成

这几天忙着写一个用于数据同步的Java程序,在这里遇到了一个令人头大的问题。
问题是这样:我的数据同步程序要同时跑四个线程,在其中的一个线程中,要做一个MD5的文件校验工作。这个MD5的校验是要通过调用一个dll来实现,这个dll(名字叫做MD5Operation.dll)是用于对文件内容进行MD5运算的,目的是用于做服务器端和客户端的文件校验。

类MD5Tool的源代码如下:

package com.hode.util;

public class MD5Tool
{
     public static native String hMd5( String szFilePath);  
     static
     {
           System.loadLibrary( "MD5Operation" );
     }
}

我声明了一个静态的本地方法hMD5,这样我在程序中就可以直接用MD5Tool.hMD5(filePathName)来调用了,经过我的简单测试,程序运行正常。
测试代码如下:

package com.hode.util

public class TestMD5
{
     public static void main(String[] args)
     {
          String filePathName = "C://my music//heal the world.mp3";
          String fileMD5Str = MD5Tool.hMD5(filePathName);
          System.out.printl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值