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()方法查看锁的类型。

    原文作者:java锁
    原文地址: https://blog.csdn.net/shushangxiaocao/article/details/17269377
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞