模块  java.base
软件包  java.nio.channels

Class FileLock

  • 实现的所有接口
    AutoCloseable

    public abstract class FileLockextends Objectimplements AutoCloseable
    表示文件区域锁定的标记。

    甲文件的锁对象被创建每一个锁经由的一个上的文件获取的时间locktryLock的方法FileChannel类或locktryLock的方法AsynchronousFileChannel类。

    文件锁定对象最初有效。 它通过调用release方法,关闭用于获取它的通道,或者通过Java虚拟机的终止(以先到者为准)来释放锁之前一直有效。 可以通过调用其isValid方法来测试锁的有效性。

    文件锁是独占的共享的 共享锁可防止其他并发运行的程序获取重叠的独占锁,但允许它们获取重叠的共享锁。 独占锁可防止其他程序获取任何类型的重叠锁。 一旦释放,锁定对其他程序可能获取的锁定没有进一步的影响。

    锁是独占还是共享可以通过调用其isShared方法来确定。 某些平台不支持共享锁,在这种情况下,对共享锁的请求会自动转换为独占锁的请求。

    单个Java虚拟机在特定文件上保留的锁不会重叠。 overlaps方法可用于测试候选锁定范围是否与现有锁重叠。

    文件锁定对象记录锁定所在文件的文件通道,锁定的类型和有效性,以及锁定区域的位置和大小。 只有锁的有效性随时间而变化; 锁状态的所有其他方面都是不可变的。

    文件锁代表整个Java虚拟机。 它们不适合控制同一虚拟机中多个线程对文件的访问。

    文件锁对象可以安全地供多个并发线程使用。

    平台依赖

    此文件锁定API旨在直接映射到底层操作系统的本机锁定工具。 因此,无论编写这些程序的语言如何,所有可以访问该文件的程序都可以看到文件上的锁定。

    锁实际上是否阻止另一个程序访问锁定区域的内容是系统相关的,因此未指定。 某些系统的本机文件锁定功能仅仅是建议性的 ,这意味着程序必须协作地观察已知的锁定协议以保证数据的完整性。 在其他系统上,本机文件锁是必需的 ,这意味着如果一个程序锁定文件的某个区域,则实际上阻止其他程序以违反锁的方式访问该区域。 在其他系统上,可以基于每个文件配置本机文件锁是建议性的还是必需的。 为了确保跨平台的一致和正确的行为,强烈建议使用此API提供的锁,就像它们是建议锁一样。

    在某些系统上,获取文件区域的强制锁定可防止该区域为mapped into memory ,反之亦然。 应该为这种组合准备组合锁定和映射的程序失败。

    在某些系统上,关闭通道会释放由基础文件上的Java虚拟机保留的所有锁,无论锁是通过该通道还是通过在同一文件上打开的另一个通道获取的。 强烈建议在程序中使用唯一通道获取任何给定文件上的所有锁。

    仅当锁定区域是页面对齐的并且是底层硬件的页面大小的整数倍时,一些网络文件系统才允许文件锁定与内存映射文件一起使用。 某些网络文件系统不会对延伸超过某个位置的区域实施文件锁定,通常为2 30或2 31 通常,在锁定驻留在网络文件系统上的文件时应特别小心。

    从以下版本开始:
    1.4
    • 构造方法详细信息

      • 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
      • toString

        public final String toString()
        返回描述此锁的范围,类型和有效性的字符串。
        重写:
        toString在类 Object
        结果
        A descriptive string