获得;未能创建锁";在Java中使用RocksDB执行并行写入时出现异常

获得;未能创建锁";在Java中使用RocksDB执行并行写入时出现异常,java,multithreading,rocksdb,Java,Multithreading,Rocksdb,我正在为RocksDb使用以下依赖项 rocksdbjni»3.5.1 下面是我从多个线程调用的代码 public static void test(){ try { RocksDB.loadLibrary(); RocksDB rocksDB = RocksDB.open("C:\\Users\\Downloads\\db"); if(rocksDB.get("abc".getBytes()) == null){

我正在为RocksDb使用以下依赖项

rocksdbjni»3.5.1

下面是我从多个线程调用的代码

public static void test(){
    try {
        RocksDB.loadLibrary();
        RocksDB rocksDB = RocksDB.open("C:\\Users\\Downloads\\db");
        if(rocksDB.get("abc".getBytes()) == null){
            rocksDB.put("abc".getBytes(),"cde".getBytes());
        }else{
            System.out.print(new String(rocksDB.get("abc".getBytes())));
        }
        rocksDB.close();
    } catch (RocksDBException e) {
        e.printStackTrace();
    }
}
当并行调用上面的代码时,我得到“org.rocksdb.rocksdbeexception:无法创建锁文件:C:\Users\Downloads\db/lock:进程无法访问该文件,因为它正被另一个进程使用。”但当我在上面的代码上加锁(或同步方法)时,它工作正常

我想用RocksDB并行编写


谢谢。

您应该创建一个
RocksDB
对象,并让您的线程共享它。它不是为每个线程创建的(并且不能共享同一个锁文件)

现在工作。我之前也试过同样的方法,但没有成功。