lock 抽象方法
锁定文件或文件的一部分。
默认情况下会获取独占锁定,但可以通过 mode
参数进行覆盖。
锁定文件从 start
到 end
的字节数,不包括位置 end
处的字节。如果没有指定任何参数,则锁定整个文件;如果只指定了 start
,则从字节位置 start
开始锁定到文件末尾,无论文件扩展多大都一样。可以指定一个显式的 end
值,这个值可以超出当前文件的长度。
为了获取文件的独占锁定,必须以写入模式打开。
如果 mode
为 FileLock.exclusive 或 FileLock.shared,如果无法获取锁定,则会触发错误。如果 mode
为 FileLock.blockingExclusive 或 FileLock.blockingShared,则仅在获取了锁定后,返回的 Future 才会被解决。
注意 文件锁定在不同平台间的行为存在细微差异
在 Linux 和 OS X 上,这使用建议性锁定,其令人惊讶的语义是,当进程关闭该文件的任何一个文件描述符时,与给定文件相关联的所有锁定都将被删除。请注意,这实际上并没有锁定文件以供访问。此外,请注意建议性锁定是针对进程级别的。这意味着在同一个进程中的多个隔离环境可以获取同一文件的独占锁定。
在 Windows 上,为锁定和解锁使用的区域必须匹配。如果不匹配,解锁将导致操作系统错误 "段已解锁"。
实现
Future<RandomAccessFile> lock(
[FileLock mode = FileLock.exclusive, int start = 0, int end = -1]);