Java NIO中的FileLock(文件锁)

时间:2019-05-28 21:57:47   收藏:0   阅读:239

 

FileLock,文件锁。

文件锁在OS中很常见,如果多个程序同时访问、修改同一个文件,很容易因为文件数据不同步而出现问题。给文件加一个锁,同一时间,只能有一个程序修改此文件,或者程序都只能读此文件,这就解决了同步问题,保证了线程安全。

 

 

 

文件锁是进程级别的,不是线程级别的。文件锁可以解决多个进程并发访问、修改同一个文件的问题,但不能解决多线程并发访问、修改同一文件的问题。

就是说使用文件锁时,同一进程内(同一个程序中)的多个线程,可以同时访问、修改此文件。

 

文件锁是当前程序所属的JVM实例持有的,一旦获取到文件锁(对文件加锁),要调用release(),或者关闭对应的FileChannel对象,或者当前JVM退出,才会释放这个锁。

 

一旦某个进程(比如说JVM实例)对某个文件加锁,则在释放这个锁之前,此进程不能再对此文件加锁,就是说JVM实例在同一文件上的文件锁是不重叠的(进程级别不能重复在同一文件上获取锁)。

 

 

 

文件锁分为2类:

 

 

 

使用示例:

 1  //创建FileChannel对象,文件锁只能通过FileChannel对象来使用
 2         FileChannel fileChannel=new FileOutputStream("./1.txt").getChannel();
 3 
 4         //对文件加锁
 5         FileLock lock=fileChannel.lock();
 6 
 7         //对此文件进行一些读写操作。
 8         //.......
 9 
10         //释放锁
11         lock.release();

 

 

 

文件锁要通过FileChannel对象使用。

有4种获取文件锁的方法:

如果指定为共享锁,则其它进程可读此文件,所有进程均不能写此文件,如果某进程试图对此文件进行写操作,会抛出异常。

 

lock与tryLock的区别:

 

 

FileLock常用的2个方法:

boolean  isShared()     //此文件锁是否是共享锁

boolean  isValid()    //此文件锁是否还有效

 

 

说明:在某些OS上,对某个文件加锁后,不能对此文件使用通道映射。

 

原文:https://www.cnblogs.com/chy18883701161/p/10940390.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!