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
ModifierConstructorDescriptionprotected
FileLock
(AsynchronousFileChannel channel, long position, long size, boolean shared) 初始化此类的新实例。protected
FileLock
(FileChannel channel, long position, long size, boolean shared) 初始化此类的新实例。 -
Method Summary
Modifier and TypeMethodDescription返回获取此锁的文件的通道。final FileChannel
channel()
返回获取此锁的文件通道。final void
close()
此方法调用release()
方法。final boolean
isShared()
告知此锁是否为共享锁。abstract boolean
isValid()
告知此锁是否有效。final boolean
overlaps
(long position, long size) 告知此锁是否与给定的锁范围重叠。final long
position()
返回锁定区域中第一个字节在文件中的位置。abstract void
release()
释放此锁。final long
size()
返回锁定区域的大小(以字节为单位)。final String
toString()
返回描述此锁的范围、类型和有效性的字符串。
-
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
返回描述此锁的范围、类型和有效性的字符串。
-