开发者社区> 问答> 正文

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

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

展开
收起
蛮大人123 2016-03-06 16:40:16 2828 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 18:54:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载