FileLock 基于进程的并发文件锁

FileLock,文件锁

FileLock 是基于进程级别的,不是针对于线程级别的,因此文件锁对象可以安全地被多个并发线程使用。

文件锁分为2类:

1. 独占锁(排它锁)

        进程对文件加独占锁后,当前进程对文件可读可写,独占此文件,其它进程是不能读该文件进行读写操作的,直至该进程释放文件锁release()。独占锁可防止其他程序获取任一类型的重叠锁。 一旦释放,锁对其他程序可能获得的锁不起任何影响。

2. 共享锁

        进程多文件加共享锁后,其它进程也可以对文件进行读操作,对于这些进程而言,也只是进行读操作,无法向文件内部写入数据,是基于进程级别安全的(线程无效)。共享锁可防止其他并发运行的程序获取重叠的独占锁,但是允许它们获取重叠的共享锁。(注意:共享锁添加之后,所有进程只能读不能写,直至该进程释放锁)

                                                                              文件处于共享锁状态,是无法写入的。 

        锁是独占还是共享可以通过调用其isShared()方法来确定。某些平台不支持共享锁,在这种情况下,共享锁的请求将自动转换为独占锁的请求。文件锁对象可以安全地被多个并发线程使用。

lock()   //对整个文件加锁,默认为排它锁

lock(long position, long size, boolean shared)   //自定义加锁方式。前2个参数指定要加锁的部分(可以只对文件的部分内容加锁),第三个参数值是 是否是共享锁。

tryLock()   //对整个文件加锁,默认为排它锁

tryLock(long position, long size, boolean shared)   //自定义加锁方式。如果指定为共享锁,则其它进程可读此文件,所有进程均不能写此文件,如果某一进程试图对此文件进行写操作,会抛出异常。

lock() 与 tryLock() 区别在于 ,tryLock()方法是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回null,不会阻塞当前线程。lock()基于阻塞的,拿不到锁会一直阻塞当前线程直至获取文件锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值