【问题标题】:Java Filelock to prevent multiple writes by multiple JVM processes not workingJava Filelock 防止多个 JVM 进程的多次写入不起作用
【发布时间】:2015-11-21 19:55:12
【问题描述】:

我正在学习 FileOperations,并且正在编写一个程序来在 linux 机器上实现 FileLocking。

  • 这个程序的目的是,如果多人调用这个程序,实例应该获得一个文件锁(类似于Linux系统上的flock)。

  • 我通过从两个不同的终端运行类文件来尝试我的程序是否正常工作。但是,它每次都返回true,也就是说,即使第一个进程运行并且没有释放锁,第二个进程也能够获得锁。

我的代码是

    public boolean getLock() throws FileNotFoundException, IOException{ 
    File lockFile = new File(conf_file);
    System.out.println("Attempting to aquire"
            + " exclusive lock on " + conf_file);
    RandomAccessFile f = new RandomAccessFile(lockFile, "rw");
    FileChannel channel = f.getChannel();
    FileLock lock;
    lock = channel.lock();
    if(lock != null && lock.isValid()){
        f.close();
        return true;
    }
    else{
        f.close();
        return false;
    }
}

我在这里做错了什么?

【问题讨论】:

  • 删除f.close()并尝试
  • 谢谢@nohup,它成功了。但是它现在在我的 ide 中显示一个警告,说资源泄漏。我怎样才能摆脱它?
  • 请把它写成答案,我会接受的。

标签: java linux locking file-locking


【解决方案1】:

删除f.close() 方法,它应该可以工作。要删除评论中的警告,请将这些变量声明为实例变量并在可能的另一种方法中执行 f.close,例如 removeLock()

【讨论】:

  • 谢谢@nohup,但这也阻止了我获得读取权限。我该如何解决?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多