Flyingis

Talking and thinking freely !
Flying in the world of GIS !
随笔 - 156, 文章 - 16, 评论 - 589, 引用 - 0
数据加载中……

文件加锁基础

作者:Flyingis

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

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

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

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

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

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

posted on 2006-01-07 13:50 Flyingis 阅读(2004) 评论(2)  编辑  收藏 所属分类: JavaSE

评论

# re: 文件加锁基础  回复  更多评论   

进程之间非常独立,很少有可以共享的东西,只有找到可以在进程间共享的东西,才能实现进程的互斥: 文件锁就是一个典型的应用。
2006-01-07 23:57 | 胡子鱼

# re: 文件加锁基础  回复  更多评论   

jdk这个不支持不同虚拟机之间加锁的。进程间互斥用不了的。
2006-01-22 13:04 | Lock

只有注册用户登录后才能发表评论。


网站导航: