java中文件加锁机制

当同时对一个文件进行操作的时候,很可能出现错误甚至锁坏文件。

在某些情况下,有一个应用的两个实例同事操作一个文件,第一个实例应该锁定这个文件,第二个实例发现这个文件被锁定,是等待它解锁还是跳过文件操作呢。

锁定一个文件,可以使用FileChannel的lock()或teylock()方法:

FileOutputStream f = new FileOutputStream("asdadasd");
			FileChannel channel = f.getChannel();
			FileLock lock = channel.lock();
lock()这个方法是一个阻塞的方法,当无法获得锁的时候,这个方法将阻塞,直到获得锁。

FileOutputStream f = new FileOutputStream("asdadasd");
			FileChannel channel = f.getChannel();
			FileLock lock = channel.tryLock();
tryLock()这个方法是非阻塞的方法,要么获得锁,要么返回空。

释放锁有两种方式,关闭通道,或者调用lock的release()方法。

甚至可以锁定文件的某一部分,如:

FileOutputStream f = new FileOutputStream("asdadasd");
			FileChannel channel = f.getChannel();
			FileLock lock = channel.lock(0, 100, true); // 也可用FileLock lock = channel.tryLock(0, 100, true);
第三个参数表明这是否是一个共享锁。若是true,表示一个共享锁,允许读个进程读文件,且不允许其他进程获得独占锁;若是false,表示这是一个独占锁,不允许其他进程操作文件。注意,并非所有的操作系统支持共享锁,为true的时候也可能返回独占锁,可以调用FileLock的isShared()方法查看锁的类型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值