系统loadLibrary在多个线程中使用时挂起

时间:2014-08-27 10:30:55

标签: java linux multithreading java-native-interface loadlibrary

我正在尝试从线程中的Java应用程序加载本机库,比如每个线程Thread1,Thread2 ...... ThreadN尝试加载相同的共享库,但是在Thread1加载库之后,其他线程被阻塞System.loadLibrary。任何人都可以帮我解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:2)

使用同步和标志:

boolean isLoaded = false;
Object lock = new Object();

void loadLibs(){
    sinchronized(lock){
        if(!isLoaded) {
            //System.loadLibrary ...
            isLoaded = true;
        }
    }
}

或者你可以使用静态构造函数的技巧,保证只能调用一次

static {
    //System.loadLibrary ...
}