最近在看flume部分功能的源码,关于FileLock的使用,其实在很多开源框架都有涉及,我所看过的有lucene,zookeeper,hadoop,es等开源框架都有用到,下面简单的介绍下FileLock。
1,FileLock是独占锁,控制不同程序(JVM)对同一文件的并发访问。
2,可以对写文件(w)加锁,而且必须是可写文件,不然回报:java.nio.channels.NonWritableChannelException异常,这样可以保证只有同一个进程才能拿到锁对文件访问。其他进程无法访问改文件,或者删除该文件的目录。
3,由于是独占锁,所以可以保证进程间顺序访问该文件,避免数据错误。s
4,FileLock的生命周期,在调用FileLock.release(),或者Channel.close(),或者JVM关闭,则生命周期结束。
5,FileLock的lock和tryLock只能调用一次,释放后才能继续获得锁。
java.io.File.deleteOnExit() 在