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