集群java锁_如何最好地在Java集群中锁定文件

这就是我最终做的事情.对于名为“XXX”的每个文件,我使用名为“XXX#LOCK”的零长度锁定文件

>我使用RandomAccessFile将其锁定以进行更新.

>当此锁定文件被锁定时,我操纵有问题的实际文件:读取原始文件,流式传输到临时文件,删除原始文件,以及重命名临时文件等.

>我解锁了锁文件

锁定代码:

File lockFile = new File(target.getParent(), target.getName() + "#LOCK");

lockAccessFile = new RandomAccessFile(lockFile, "rw");

FileChannel lockChannel = lockAccessFile.getChannel();

lock = lockChannel.lock();

解锁代码:

if (lock != null) {

lock.release();

lock = null;

}

if (lockAccessFile != null) {

lockAccessFile.close();

lockAccessFile = null;

}

我将它包装在一个类中,该类使得锁定和解锁与原始文件的读取或写入一起.如您所见,lock和lockAccessFile是成员变量.

我从来没有在锁文件中写任何东西,但它们存在于文件夹中.由于我有少量文件要以这种方式管理(其中6个),我只是将LOCK文件留在那里,因为它是丑陋但无害的开销.

这在我的代码中跨多宿主集群工作,因为我的代码是唯一操纵这些文件的东西.最大的问题是,如果其他一些代码在不知道此约定的情况下开始操作文件,则会导致问题.我没有找到任何证据表明有一种标准的方法来处理这个问题,这个问题将由操作系统强制执行,同时由Java支持.如果您知道,请告诉我.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值