java.lang.Object
java.nio.channels.FileLock
- 所有已实现的接口:
-
AutoCloseable
代表文件区域上锁的令牌。
每当通过lock或tryLock方法的FileChannel类,或lock或tryLock方法的AsynchronousFileChannel类来在文件上获取锁时,都会创建一个文件锁对象。
文件锁对象最初是有效的。它保持有效,直到通过调用release方法释放锁,通过关闭用于获取锁的通道,或通过Java虚拟机的终止,以先到者为准。可以通过调用其isValid方法来测试锁的有效性。
文件锁可以是独占或共享的。共享锁阻止其他同时运行的程序获取重叠的独占锁,但允许它们获取重叠的共享锁。独占锁阻止其他程序获取任一类型的重叠锁。一旦释放锁,锁对其他程序可能获取的锁没有进一步影响。
可以通过调用其isShared方法确定锁是独占还是共享的。一些平台不支持共享锁,如果是这种情况,对共享锁的请求会自动转换为对独占锁的请求。
由单个Java虚拟机持有的特定文件上的锁不会重叠。可以使用overlaps方法来测试候选锁范围是否与现有锁重叠。
文件锁对象记录了持有锁的文件通道,锁的类型和有效性,以及锁定区域的位置和大小。锁的有效性是随时间变化的唯一方面;锁状态的所有其他方面都是不可变的。
文件锁代表整个Java虚拟机持有。它们不适合控制同一虚拟机内多个线程对文件的访问。
文件锁对象可安全用于多个并发线程。
- 自版本:
- 1.4
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedFileLock(AsynchronousFileChannel channel, long position, long size, boolean shared) 初始化此类的新实例。protectedFileLock(FileChannel channel, long position, long size, boolean shared) 初始化此类的新实例。 -
Method Summary
Modifier and TypeMethodDescription返回获取此锁的文件的通道。final FileChannelchannel()返回获取此锁的文件通道。final voidclose()此方法调用release()方法。final booleanisShared()告知此锁是否为共享锁。abstract booleanisValid()告知此锁是否有效。final booleanoverlaps(long position, long size) 告知此锁是否与给定的锁范围重叠。final longposition()返回锁定区域中第一个字节在文件中的位置。abstract voidrelease()释放此锁。final longsize()返回锁定区域的大小(以字节为单位)。final StringtoString()返回描述此锁的范围、类型和有效性的字符串。
-
Constructor Details
-
FileLock
初始化此类的新实例。- 参数:
-
channel- 持有此锁的文件通道 -
position- 锁定区域开始的文件中的位置;必须为非负数 -
size- 锁定区域的大小;必须为非负数,并且总和position+size必须为非负数 -
shared- 如果此锁是共享的,则为true,如果是独占的,则为false - 抛出:
-
IllegalArgumentException- 如果参数的前提条件不成立
-
FileLock
初始化此类的新实例。- 参数:
-
channel- 持有此锁的通道的文件 -
position- 锁定区域开始的文件中的位置;必须为非负数 -
size- 锁定区域的大小;必须为非负数,并且总和position+size必须为非负数 -
shared- 如果此锁是共享的,则为true,如果是独占的,则为false - 抛出:
-
IllegalArgumentException- 如果参数的前提条件不成立 - 自版本:
- 1.7
-
-
Method Details
-
channel
返回获取此锁的文件通道。此方法已被
acquiredBy方法取代。- 返回:
-
文件通道,如果文件锁不是由文件通道获取,则返回
null。
-
acquiredBy
返回获取此锁的文件的通道。- 返回:
- 获取此锁的文件的通道。
- 自版本:
- 1.7
-
position
public final long position()返回锁定区域中第一个字节在文件中的位置。锁定区域不一定包含在实际底层文件中,甚至可能不重叠,因此此方法返回的值可能超过文件的当前大小。
- 返回:
- 位置
-
size
public final long size()返回锁定区域的大小(以字节为单位)。锁定区域不一定包含在实际底层文件中,甚至可能不重叠,因此此方法返回的值可能超过文件的当前大小。
- 返回:
- 锁定区域的大小
-
overlaps
public final boolean overlaps(long position, long size) 告知此锁是否与给定的锁范围重叠。- 参数:
-
position- 锁范围的起始位置 -
size- 锁范围的大小 - 返回:
-
如果此锁与给定的锁范围至少重叠一个字节,则返回
true;如果size为负数或锁范围不与此锁重叠,则返回false
-
isValid
public abstract boolean isValid()告知此锁是否有效。锁对象保持有效,直到释放或关联的文件通道关闭,以先到者为准。
- 返回:
-
如果此锁有效,则返回
true
-
release
释放此锁。如果此锁对象有效,则调用此方法会释放锁并使对象无效。如果此锁对象无效,则调用此方法不会产生任何效果。
- 抛出:
-
ClosedChannelException- 如果用于获取此锁的通道不再打开 -
IOException- 如果发生I/O错误
-
close
此方法调用release()方法。它被添加到类中,以便与自动资源管理块结构一起使用。- 指定者:
-
close在接口AutoCloseable中 - 抛出:
-
IOException - 自版本:
- 1.7
-
toString
返回描述此锁的范围、类型和有效性的字符串。
-