开发者社区> 问答> 正文

关于JNI多次加载同一个动态链接库

同一个动态链接库可以被加载多次吗?使用System.loadLibrary()
如果可以,因为我用的C库代码不是线程安全的,可以通过一个线程加载一次而实现线程安全吗?

展开
收起
a123456678 2016-06-08 21:54:26 1920 0
1 条回答
写回答
取消 提交回答
  • 测试了,不能。
    测试代码:
    cpp入口代码:

    static int testflag = 0;
    extern "C" JNIEXPORT jint JNICALL Java_com_example_speexserver_codec_Speex_getDecodeFrameSize(
            JNIEnv * env, jobject obj) {
        if(testflag == 0)
            testflag += 1;
        else if(testflag == 1)
            testflag += 1;
        return (jint)testflag;
    }
    Java端部分代码:
    
    public void init() {
            load();    
            open(DEFAULT_COMPRESSION);
            System.out.println("Speex inited");
    }    
    private void load() {
            try {
                System.loadLibrary("libSpeex");
            } catch (Throwable e) {
                e.printStackTrace();
            }
    }
    Java测试代码:
    
    public static void main(String[] args) {
            Speex speexA = new Speex();
            speexA.init();
            System.out.println(speexA.getDecodeFrameSize());
            Speex speexB = new Speex();
            speexB.init();
            System.out.println(speexB.getDecodeFrameSize());
    }
    结果:
    
    Speex inited
    1
    Speex inited
    2
    2019-07-17 19:32:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载