クラスFileLock
- すべての実装されたインタフェース:
AutoCloseable
FileChannelクラスのlockメソッドまたはtryLockメソッド、またはAsynchronousFileChannelクラスのlockメソッドまたはtryLockメソッドの1つを使用してファイル上にロックを獲得すると、そのたびにファイルロック・オブジェクトが作成されます。
ファイルロック・オブジェクトは最初から有効であり、 releaseメソッドの呼び出し、ロックの獲得に使用したチャネルのクローズ、Java仮想マシンの終了などによってロックが解放されるまで、その状態を保持します。 ロックの有効性は、isValidメソッドを呼び出すことによってテストできます。
ファイル・ロックには排他ロックと共有ロックがあります。 共有ロックの 合、並行して実行されているその他のプログラ は、オーバーラップする排他ロックを獲得できません。オーバーラップする共有ロックであれば獲得可能です。 一方、排他ロックの 合、どちらの種類のロックも獲得できません。 ロックを解放すると、その他のプログラ によって獲得されるロックへの影響はなくなります。
排他ロックであるか共有ロックであるかは、isSharedメソッドを呼び出すことで判断できます。 共有ロックをサポートしないプラットフォー では、共有ロック要求が自動的に排他ロック要求に変換されます。
単一のJava仮想マシンによって特定のファイル上に保持されているロックは、オーバーラップしません。 候補となるロックの範囲が既存のロックとオーバーラップするかどうかは、overlapsメソッドでテストできます。
ファイルロック・オブジェクトは、ロックを保持しているファイル、ロックの種類と有効性、ロックされた 域の位置とサイズに関するファイル・チャネル情 を記録します。 時間の経過とともに変化するのは、ロックの有効性 けです。その他のロック状態は不変です。
ファイル・ロックはJava仮想マシン全体のために保持されます。 これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するのには適していません。
ファイルロック・オブジェクトは、複数の並行スレッドで安全に使用できます。
プラットフォー の依存性
このファイル・ロックAPIは、基礎にあるオペレーティング・システ のネイティブのロック機能に直接マッピングされます。 このため、ファイルにアクセスできるあらゆるプログラ が、作成に使用された言語とは関係なく、このファイル上に保持されたロックを認識します。
ロックされた 域のコンテンツにその他のプログラ からアクセスできなくなるかどうかは、システ によって決まるため未指定です。 ネイティブのファイル・ロックとして、アドバイザリ・ロックしかサポートしないシステ もあります。こうしたシステ では、データの整合性を保証するため、プログラ を使って既知のロック・プロトコルを監視する必要があります。 一方、ネイティブのファイル・ロックが必 ロックというシステ もあります。この 合、あるプログラ によってファイル 域がロックされているとき、その他のプログラ からロックを ってその 域にアクセスすることはできません。 このほか、ネイティブのファイル・ロックをアドバイザリ・ロックにするか必 ロックにするかをファイル単位で選択できるシステ もあります。 プラットフォー 間の動作の一貫性と正確性を確保するためには、このAPIの提供するロックをアドバイザリ・ロックとして使用することを強くお薦めします。
システ によっては、ファイル 域上で必 ロックを獲得すると、そのファイル 域をメモリーにマッピングできなくなったり、反対にメモリーをファイル 域にマッピングできなくなったりする 合があります。 ロックとマッピングの両方を組み合わせて使用するプログラ では、この組み合わせが失敗することに備えておく必要があります。
システ によっては、チャネルをクローズすると、基礎にあるファイル上でJava仮想マシンによって保持されていたロックが、そのチャネルから獲得したか、または同じファイル上でオープンしている別のチャネルから獲得したかに関係なく、すべて解除される 合があります。 単一のプログラ 内では、ある特定のファイル上のすべてのロックを一意のチャネルで獲得することを強くお薦めします。
一部のネットワーク・ファイル・システ では、ロックされた 域がページ型で、基礎にあるハードウェアのページ・サイズの完全倍数である 合に限り、ファイル・ロックをメモリー・マップで使用することができます。 また別のネットワーク・ファイル・システ では、特定の位より上(通常230または231)の 域上のファイル・ロックが実装されません。 一般に、ネットワーク・ファイル・システ 上のファイルをロックするときは、細心の注意を払う必要があります。
- 導入されたバージョン:
- 1.4
-
コンストラクタのサマリー
コンストラクタ修飾子コンストラクタ説明protectedFileLock(AsynchronousFileChannel channel, long position, long size, boolean shared) このクラスの新しいインスタンスを初期化します。protectedFileLock(FileChannel channel, long position, long size, boolean shared) このクラスの新しいインスタンスを初期化します。 -
メソッドのサマリー
修飾子と型メソッド説明このロックが獲得されたファイルを持つチャネルを返します。final FileChannelchannel()このロックが獲得されたファイルを持つファイル・チャネルを返します。final voidclose()このメソッドは、release()メソッドを呼び出します。final booleanisShared()このロックが共有ロックであるかどうかを判断します。abstract booleanisValid()このロックが有効であるかどうかを判断します。final booleanoverlaps(long position, long size) このロックが指定されたロック範囲とオーバーラップしているかどうかを判断します。final longposition()ファイル内のロックされた 域の最初のバイトの位置を返します。abstract voidrelease()このロックを解除します。final longsize()ロックされた 域のサイズをバイトで返します。final StringtoString()このロックの範囲、種類、有効性を説明する文字列を返します。
-
コンストラクタの詳細
-
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()ロックされた 域のサイズをバイトで返します。ロックされた 域が基礎にあるファイルに含まれていたり、オーバーラップしたりしている必要はありません。このメソッドは、現在のファイル・サイズ以上の値を返すことがあります。
- 戻り値:
- ロックされた 域のサイズ
-
overlaps
public final boolean overlaps(long position, long size) このロックが指定されたロック範囲とオーバーラップしているかどうかを判断します。- パラメータ:
position- ロック範囲の開始位置size- ロック範囲のサイズ- 戻り値:
- このロックおよび指定されたロック範囲が少なくとも1バイト重複する 合、
true。sizeが の 合、またはロック範囲がこのロックと重複しない 合、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
-