クラスFileLock

java.lang.Object
java.nio.channels.FileLock
すべての実装されたインタフェース:
AutoCloseable

public abstract class FileLock extends Object implements AutoCloseable
ファイル 域上のロックを示すトークンです。

FileChannelクラスのlockメソッドまたはtryLockメソッド、またはAsynchronousFileChannelクラスのlockメソッドまたはtryLockメソッドの1つを使用してファイル上にロックを獲得すると、そのたびにファイルロック・オブジェクトが作成されます。

ファイルロック・オブジェクトは最初から有効であり、 releaseメソッドの呼び出し、ロックの獲得に使用したチャネルのクローズ、Java仮想マシンの終了などによってロックが解放されるまで、その状態を保持します。 ロックの有効性は、isValidメソッドを呼び出すことによってテストできます。

ファイル・ロックには排他ロック共有ロックがあります。 共有ロックの 合、並行して実行されているその他のプログラ は、オーバーラップする排他ロックを獲得できません。オーバーラップする共有ロックであれば獲得可能です。 一方、排他ロックの 合、どちらの種類のロックも獲得できません。 ロックを解放すると、その他のプログラ によって獲得されるロックへの影響はなくなります。

排他ロックであるか共有ロックであるかは、isSharedメソッドを呼び出すことで判断できます。 共有ロックをサポートしないプラットフォー では、共有ロック要求が自動的に排他ロック要求に変換されます。

単一のJava仮想マシンによって特定のファイル上に保持されているロックは、オーバーラップしません。 候補となるロックの範囲が既存のロックとオーバーラップするかどうかは、overlapsメソッドでテストできます。

ファイルロック・オブジェクトは、ロックを保持しているファイル、ロックの種類と有効性、ロックされた 域の位置とサイズに関するファイル・チャネル情 を記録します。 時間の経過とともに変化するのは、ロックの有効性 けです。その他のロック状態は不変です。

ファイル・ロックはJava仮想マシン全体のために保持されます。 これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するのには適していません。

ファイルロック・オブジェクトは、複数の並行スレッドで安全に使用できます。

プラットフォー の依存性

このファイル・ロックAPIは、基礎にあるオペレーティング・システ のネイティブのロック機能に直接マッピングされます。 このため、ファイルにアクセスできるあらゆるプログラ が、作成に使用された言語とは関係なく、このファイル上に保持されたロックを認識します。

ロックされた 域のコンテンツにその他のプログラ からアクセスできなくなるかどうかは、システ によって決まるため未指定です。 ネイティブのファイル・ロックとして、アドバイザリ・ロックしかサポートしないシステ もあります。こうしたシステ では、データの整合性を保証するため、プログラ を使って既知のロック・プロトコルを監視する必要があります。 一方、ネイティブのファイル・ロックが必 ロックというシステ もあります。この 合、あるプログラ によってファイル 域がロックされているとき、その他のプログラ からロックを ってその 域にアクセスすることはできません。 このほか、ネイティブのファイル・ロックをアドバイザリ・ロックにするか必 ロックにするかをファイル単位で選択できるシステ もあります。 プラットフォー 間の動作の一貫性と正確性を確保するためには、このAPIの提供するロックをアドバイザリ・ロックとして使用することを強くお薦めします。

システ によっては、ファイル 域上で必 ロックを獲得すると、そのファイル 域をメモリーにマッピングできなくなったり、反対にメモリーをファイル 域にマッピングできなくなったりする 合があります。 ロックとマッピングの両方を組み合わせて使用するプログラ では、この組み合わせが失敗することに備えておく必要があります。

システ によっては、チャネルをクローズすると、基礎にあるファイル上でJava仮想マシンによって保持されていたロックが、そのチャネルから獲得したか、または同じファイル上でオープンしている別のチャネルから獲得したかに関係なく、すべて解除される 合があります。 単一のプログラ 内では、ある特定のファイル上のすべてのロックを一意のチャネルで獲得することを強くお薦めします。

一部のネットワーク・ファイル・システ では、ロックされた 域がページ型で、基礎にあるハードウェアのページ・サイズの完全倍数である 合に限り、ファイル・ロックをメモリー・マップで使用することができます。 また別のネットワーク・ファイル・システ では、特定の位より上(通常230または231)の 域上のファイル・ロックが実装されません。 一般に、ネットワーク・ファイル・システ 上のファイルをロックするときは、細心の注意を払う必要があります。

導入されたバージョン:
1.4
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
    このクラスの新しいインスタンスを初期化します。
    protected
    FileLock(FileChannel channel, long position, long size, boolean shared)
    このクラスの新しいインスタンスを初期化します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このロックが獲得されたファイルを持つチャネルを返します。
    このロックが獲得されたファイルを持つファイル・チャネルを返します。
    final void
    このメソッドは、release()メソッドを呼び出します。
    final boolean
    このロックが共有ロックであるかどうかを判断します。
    abstract boolean
    このロックが有効であるかどうかを判断します。
    final boolean
    overlaps(long position, long size)
    このロックが指定されたロック範囲とオーバーラップしているかどうかを判断します。
    final long
    ファイル内のロックされた 域の最初のバイトの位置を返します。
    abstract void
    このロックを解除します。
    final long
    ロックされた 域のサイズをバイトで返します。
    final String
    このロックの範囲、種類、有効性を説明する文字列を返します。

    クラスjava.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • 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 - ロック範囲のサイズ
      戻り値:
      このロックおよび指定されたロック範囲が少なくとも1バイト重複する 合、truesizeが の 合、またはロック範囲がこのロックと重複しない 合、false
    • isValid

      public abstract boolean isValid()
      このロックが有効であるかどうかを判断します。

      ロック・オブジェクトは、ロックが解放されるか、関連したファイル・チャネルがクローズされるまで有効です。

      戻り値:
      このロックが有効な 合のみtrue
    • release

      public abstract void release() throws IOException
      このロックを解除します。

      このメソッドを呼び出すと、ロック・オブジェクトが有効ならロックが解除され、無効になります。 ロック・オブジェクトが無効なら変化はありません。

      スロー:
      ClosedChannelException - このロックの獲得に使用したチャネルがオープンしていない 合
      IOException - 入出力エラーが発生した 合
    • close

      public final void close() throws IOException
      このメソッドは、release()メソッドを呼び出します。 これは、自動リソース管理ブロック構文とともに使用できるように、クラスに追 されました。
      定義:
      close、インタフェースAutoCloseable
      スロー:
      IOException
      導入されたバージョン:
      1.7
    • toString

      public final String toString()
      このロックの範囲、種類、有効性を説明する文字列を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      説明文字列