public abstract class FileLock extends Object implements AutoCloseable
甲文件的锁对象被创建每一个锁经由的一个上的文件获取的时间lock
种或tryLock
所述的方法FileChannel
类,或lock
种或tryLock
所述的方法AsynchronousFileChannel
类。
文件锁定对象最初有效。 它通过调用release
方法,通过关闭用于获取锁定的通道,或通过Java虚拟机的终止(以较先者为准)来释放锁定。 可以通过调用其isValid
方法来测试锁的有效性。
文件锁是独占的或共享的 。 共享锁可防止其他并发运行的程序获取重叠的独占锁,但是允许它们获取重叠的共享锁。 排他锁可防止其他程序获取任一类型的重叠锁。 一旦释放,锁对其他程序可能获得的锁不起任何影响。
锁是独占还是共享可以通过调用其isShared
方法来确定 。 某些平台不支持共享锁,在这种情况下,共享锁的请求将自动转换为独占锁的请求。
由单个Java虚拟机在特定文件上保存的锁不重叠。 overlaps
方法可用于测试候选锁定范围是否与现有锁重叠。
文件锁定对象记录保存文件的文件通道,锁的类型和有效性以及锁定区域的位置和大小。 只有锁的有效性随时间而变化; 锁的状态的所有其他方面是不可变的。
文件锁代表整个Java虚拟机。 它们不适用于通过同一虚拟机中的多个线程来控制对文件的访问。
此文件锁定API旨在直接映射到底层操作系统的本机锁定工具。 因此,对于能够访问该文件的所有程序,不管写入哪些程序的语言,文件夹上的锁都应该可见。
锁实际上是否阻止另一个程序访问锁定区域的内容是系统依赖的,因此是未指定的。 一些系统的本地文件锁定设施只是建议 ,这意味着程序必须协调地观察已知的锁定协议,以保证数据的完整性。 在其他系统上,本地文件锁是必需的 ,这意味着如果一个程序锁定一个文件的区域,那么实际上阻止其他程序以违反该锁的方式访问该区域。 在其他系统上,无论是本地文件锁是辅助还是强制性,都可以在每个文件的基础上进行配置。 为确保跨平台的一致和正确的行为,强烈建议使用该API提供的锁,就像它们是建议锁一样。
在某些系统上,获取文件区域上的强制性锁定可防止该区域为mapped into memory
,反之亦然。 应该准备组合锁定和映射的程序以使此组合失败。
在某些系统上,关闭通道会释放底层文件上的Java虚拟机所持有的锁,无论是通过该通道获取锁还是通过在同一文件上打开的其他通道。 强烈建议在程序中使用唯一的通道来获取任何给定文件上的所有锁。
一些网络文件系统只有当锁定区域是页面对齐的和底层硬件的页面大小的整数倍时,才允许文件锁定与内存映射文件一起使用。 某些网络文件系统不会在延伸到某一位置(通常为2 30或2 31)的区域上实现文件锁定。 通常,在锁定驻留在网络文件系统上的文件时,应特别小心。
Modifier | Constructor and Description |
---|---|
protected |
FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。
|
protected |
FileLock(FileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
Channel |
acquiredBy()
返回获取此锁的文件的通道。
|
FileChannel |
channel()
返回获取此锁的文件通道。
|
void |
close()
此方法调用
release() 方法。
|
boolean |
isShared()
告诉这个锁是否共享。
|
abstract boolean |
isValid()
告诉这个锁是否有效。
|
boolean |
overlaps(long position, long size)
告诉这个锁是否与给定的锁定范围重叠。
|
long |
position()
返回锁定区域的第一个字节的文件中的位置。
|
abstract void |
release()
释放这个锁
|
long |
size()
以字节为单位返回锁定区域的大小。
|
String |
toString()
返回描述此锁的范围,类型和有效性的字符串。
|
protected FileLock(FileChannel channel, long position, long size, boolean shared)
channel
- 保存此锁的文件通道
position
- 锁定区域开始的文件中的位置;
必须是非负的
size
- 锁定区域的大小;
必须是非负数,并且总和position + size必须是非负数
shared
-
true如果这个锁是共享的,
false如果是排他的
IllegalArgumentException
- 如果参数的前提条件不成立
protected FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
channel
- 保存此锁的文件的通道
position
- 锁定区域开始的文件中的位置;
必须是非负的
size
- 锁定区域的大小;
必须是非负数,并且总和position + size必须是非负数
shared
-
true如果这个锁是共享的,
false如果是排他的
IllegalArgumentException
- 如果参数的前提条件不成立
public final FileChannel channel()
该方法已被acquiredBy
方法所取代 。
null
如果文件锁没有被文件通道获取。
public Channel acquiredBy()
public final long position()
锁定区域不需要包含在实际的底层文件内,甚至重叠,因此此方法返回的值可能会超过文件的当前大小。
public final long size()
锁定区域不需要包含在实际的底层文件内,甚至重叠,因此此方法返回的值可能会超过文件的当前大小。
public final boolean isShared()
public final boolean overlaps(long position, long size)
position
- 锁定范围的起始位置
size
- 锁定范围的大小
public abstract boolean isValid()
锁定对象在释放之前保持有效,或关联的文件通道关闭,以先到者为准。
public abstract void release() throws IOException
如果此锁对象有效,则调用此方法将释放该锁并使该对象无效。 如果此锁对象无效,则调用此方法将不起作用。
ClosedChannelException
- 如果用于获取此锁的通道不再打开
IOException
- 如果发生I / O错误
public final void close() throws IOException
release()
方法。
它被添加到类中,以便它可以与自动资源管理块结构一起使用。
close
中的
AutoCloseable
IOException