モジュール java.base
パッケージ java.nio.channels

クラス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