Module java.base

Class FileLock

java.lang.Object
java.nio.channels.FileLock
所有已实现的接口:
AutoCloseable

public abstract class FileLock extends Object implements AutoCloseable
代表文件区域上锁的令牌。

每当通过locktryLock方法的FileChannel类,或locktryLock方法的AsynchronousFileChannel类来在文件上获取锁时,都会创建一个文件锁对象。

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

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

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

由单个Java虚拟机持有的特定文件上的锁不会重叠。可以使用overlaps方法来测试候选锁范围是否与现有锁重叠。

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

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

文件锁对象可安全用于多个并发线程。

自版本:
1.4
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
    初始化此类的新实例。
    protected
    FileLock(FileChannel channel, long position, long size, boolean shared)
    初始化此类的新实例。
  • Method Summary

    Modifier and Type
    Method
    Description
    返回获取此锁的文件的通道。
    final FileChannel
    返回获取此锁的文件通道。
    final void
    close()
    此方法调用release()方法。
    final boolean
    告知此锁是否为共享锁。
    abstract boolean
    告知此锁是否有效。
    final boolean
    overlaps(long position, long size)
    告知此锁是否与给定的锁范围重叠。
    final long
    返回锁定区域中第一个字节在文件中的位置。
    abstract void
    释放此锁。
    final long
    size()
    返回锁定区域的大小(以字节为单位)。
    final String
    返回描述此锁的范围、类型和有效性的字符串。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • 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
  • Method Details

    • 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;如果size为负数或锁范围不与此锁重叠,则返回false
    • 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()方法。它被添加到类中,以便与自动资源管理块结构一起使用。
      指定者:
      close 在接口 AutoCloseable
      抛出:
      IOException
      自版本:
      1.7
    • toString

      public final String toString()
      返回描述此锁的范围、类型和有效性的字符串。
      覆盖:
      toString 在类 Object
      返回:
      一个描述性字符串