为什么我不能使用createNewFile进行文件锁定?

时间:2017-11-27 10:07:06

标签: java file concurrency locking

createNewFile州的Javadoc:

  

注意:此方法不应用于文件锁定,因为   结果协议无法可靠地工作。 FileLock   应该使用设施。

createNewFile不应该用于文件锁定的原因是什么,它引用的不可靠性的区域是什么?

就我而言,createNewFile只创建一个文件,我不明白为什么它不能用作锁定机制的一部分。让我来描述一下我的用例:

  • 多台机器都可以访问已安装的文件系统,并且需要处理/更新文件(不要说mydata.properties
  • 每台机器在一个进程中只有一个线程需要访问该文件。只有冲突可以在不同的机器之间进行
  • 相关进程可能在不同计算机上作为相同的用户ID运行
  • 为了保持数据一致性,一次只能有一台机器处理/更新文件(换句话说,如果一台机器正在处理,则另一台机器无法进行更新)
  • 机器由其IP地址唯一标识

为实现这一点,我计划实施一项策略:

  • 当机器开始处理文件时,它将创建一个锁定文件(例如mydata.properties.lock),其中包含机器的IP地址和当前时间戳
  • 如果createNewFile方法失败,假设某个其他计算机持有锁并继续等待锁被释放
  • 经过一段固定的超时(在锁定文件中的时间戳之后),无论如何都要释放锁定(这是为了应对机器锁定然后立即崩溃的情况)
  • 一旦机器出现锁定,请仔细检查其IP地址是否在文件中(不确定是否需要执行此步骤)
  • 处理完成后,删除文件以释放锁定

我不确定为什么在这种情况下我无法使用createNewFile?我试着阅读推荐的FileLock文档作为替代方案,但我无法弄清楚这种机制如何影响我的用例。我不太熟悉"文件频道"但是,我可能会误解。

0 个答案:

没有答案