- java.lang.Object
-
- java.nio.channels.FileLock
-
- All Implemented Interfaces:
-
AutoCloseable
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)的区域上实现文件锁定。 通常,在锁定驻留在网络文件系统上的文件时,应特别小心。
- 从以下版本开始:
- 1.4
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。protected
FileLock(FileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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()
返回描述此锁的范围,类型和有效性的字符串。
-
-
-
构造方法详细信息
-
FileLock
protected FileLock(FileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。- 参数
-
channel
- 保存此锁的文件通道 -
position
- 锁定区域开始的文件中的位置; 必须是非负的 -
size
- 锁定区域的大小; 必须是非负数,并且position
+size
的总和必须是非负数 -
shared
-true
如果这个锁是共享的,false
如果是排他的 - 异常
-
IllegalArgumentException
- 如果参数的前提条件不成立
-
FileLock
protected FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
初始化此类的新实例。- 参数
-
channel
- 保存此锁的文件的通道 -
position
- 锁定区域启动的文件中的位置; 必须是非负的 -
size
- 锁定区域的大小; 必须是非负数,并且总和position
+size
必须是非负数 -
shared
-true
如果这个锁是共享的,false
如果是排他的 - 异常
-
IllegalArgumentException
- 如果参数的前提条件不成立 - 从以下版本开始:
- 1.7
-
-
方法详细信息
-
channel
public final FileChannel channel()
返回获取此锁的文件通道。该方法已被
acquiredBy
方法所取代。- 结果
-
文件通道,或
null
如果文件锁没有被文件通道获取。
-
acquiredBy
public Channel acquiredBy()
返回获取此锁的文件的通道。- 结果
- 获取此锁的通道。
- 从以下版本开始:
- 1.7
-
position
public final long position()
返回锁定区域的第一个字节的文件中的位置。锁定区域不需要包含在实际的底层文件内,甚至重叠,因此此方法返回的值可能会超过文件的当前大小。
- 结果
- 的位置
-
size
public final long size()
以字节为单位返回锁定区域的大小。锁定区域不需要包含在实际的底层文件内,甚至重叠,因此此方法返回的值可能会超过文件的当前大小。
- 结果
- 锁定区域的大小
-
isShared
public final boolean isShared()
告诉这个锁是否共享。- 结果
-
true
如果锁是共享的,false
如果是排他的
-
overlaps
public final boolean overlaps(long position, long size)
告诉这个锁是否与给定的锁定范围重叠。- 参数
-
position
- 锁定范围的起始位置 -
size
- 锁定范围的大小 - 结果
-
true
如果,并且只有这个锁和给定的锁定范围重叠至少一个字节
-
isValid
public abstract boolean isValid()
告诉这个锁是否有效。锁定对象在释放之前保持有效,或关联的文件通道关闭,以先到者为准。
- 结果
-
true
如果,且仅当此锁定有效
-
release
public abstract void release() throws IOException
释放这个锁如果此锁对象有效,则调用此方法将释放该锁并使该对象无效。 如果此锁对象无效,则调用此方法将不起作用。
- 异常
-
ClosedChannelException
- 如果用于获取此锁的通道不再打开 -
IOException
- 如果发生I / O错误
-
close
public final void close() throws IOException
此方法调用release()
方法。 它被添加到类中,以便它可以与自动资源管理块结构一起使用。- Specified by:
-
close
在接口AutoCloseable
- 异常
-
IOException
- 从以下版本开始:
- 1.7
-
-