文件加锁基础

文件加锁基础

作者:Flyingis

    文件加锁是
JDK1.4引入的一种机制,它允许我们同步访问某个作为共享资源的文件。竞争同一文件的两个线程可能在不同的Java虚拟机上,或者一个是Java线程,另一个是操作系统中的某个本地线程。文件锁对其他的操作系统进程是可见的,因为Java的文件加锁直接映射到了本地操作系统的加锁工具。

通过对FileChannel调用tryLock()lock(),就可以获得整个文件的FileLock。特殊的是,SocketChannel/DatagramChannel/ServerSocketChannel不需要加锁,因为它们是从单进程实体继承而来,我们通常不在两个进程之间共享网络的socket

tryLock()是非阻塞式的,它设法获取锁,但如果不能获得,例如因为其他一些进程已经持有相同的锁,而且不共享时,它将直接从方法调用返回。

lock()是阻塞式的,它要阻塞进程直到锁可以获得,或调用lock()的线程中断,或调用lock()的通道关闭。

对独占锁和共享锁的支持必须由底层的操作系统提供。锁的类型可以通过FileLock.isShared()进行查询。另外,我们不能获取缓冲器上的锁,只能是通道上的。

文件加锁的实际应用之一:文件映射通常应用于大型的文件,我们可能需要对巨大的文件进行部分加锁,以便其他的进程可以修改文件中未被加锁的部分,数据库就是如此,使得多用户可以访问到未加锁的部分数据。其他的应用还知之甚少。

你可能感兴趣的:(文件加锁基础)