Java Filelock可防止多个JVM进程无法进行多次写入

时间:2015-11-21 19:55:13

标签: java linux locking file-locking

我正在学习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;
    }
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

删除f.close()方法,它应该有效。要删除注释中的警告,请将这些变量声明为实例变量,然后在removeLock()等其他方法中执行f.close。