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)の領域上のファイル・ロックが実装されません。一般に、ネットワーク・ファイル・システム上のファイルをロックするときは、細心の注意を払う必要があります。
修飾子 | コンストラクタと説明 |
---|---|
protected |
FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
このクラスの新しいインスタンスを初期化します。
|
protected |
FileLock(FileChannel channel, long position, long size, boolean shared)
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
Channel |
acquiredBy()
このロックが獲得されたファイルを持つチャネルを返します。
|
FileChannel |
channel()
このロックが獲得されたファイルを持つファイル・チャネルを返します。
|
void |
close()
このメソッドは、
release() メソッドを呼び出します。 |
boolean |
isShared()
このロックが共有ロックであるかどうかを判断します。
|
abstract boolean |
isValid()
このロックが有効であるかどうかを判断します。
|
boolean |
overlaps(long position, long size)
このロックが指定されたロック範囲とオーバーラップしているかどうかを判断します。
|
long |
position()
ファイル内のロックされた領域の最初のバイトの位置を返します。
|
abstract void |
release()
このロックを解除します。
|
long |
size()
ロックされた領域のサイズをバイトで返します。
|
String |
toString()
このロックの範囲、種類、有効性を説明する文字列を返します。
|
protected FileLock(FileChannel channel, long position, long size, boolean shared)
channel
- このロックが保持されているファイルを持つファイル・チャネルposition
- ファイル内の、ロックされた領域の開始位置。負でない値である必要がありますsize
- ロック領域のサイズ。負でない値である必要があります。position + sizeも負でない値である必要がありますshared
- このロックが共有ロックの場合true、排他ロックの場合falseIllegalArgumentException
- 上記のパラメータの前提条件が満たされていない場合protected FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
channel
- このロックが保持されているファイルを持つチャネルposition
- ファイル内の、ロックされた領域の開始位置。負でない値である必要がありますsize
- ロック領域のサイズ。負でない値である必要があります。position + sizeも負でない値である必要がありますshared
- このロックが共有ロックの場合true、排他ロックの場合falseIllegalArgumentException
- 上記のパラメータの前提条件が満たされていない場合public final FileChannel channel()
このメソッドはacquiredBy
メソッドにとって代わりました。
null
。public Channel acquiredBy()
public final long position()
ロックされた領域が基礎にあるファイルに含まれていたり、オーバーラップしたりしている必要はありません。このメソッドは、現在のファイル・サイズ以上の値を返すことがあります。
public final long size()
ロックされた領域が基礎にあるファイルに含まれていたり、オーバーラップしたりしている必要はありません。このメソッドは、現在のファイル・サイズ以上の値を返すことがあります。
public final boolean isShared()
public final boolean overlaps(long position, long size)
position
- ロック範囲の開始位置size
- ロック範囲のサイズpublic abstract boolean isValid()
ロック・オブジェクトは、ロックが解放されるか、関連したファイル・チャネルがクローズされるまで有効です。
public abstract void release() throws IOException
このメソッドを呼び出すと、ロック・オブジェクトが有効ならロックが解除され、無効になります。ロック・オブジェクトが無効なら変化はありません。
ClosedChannelException
- このロックの獲得に使用したチャネルがオープンしていない場合IOException
- 入出力エラーが発生した場合public final void close() throws IOException
release()
メソッドを呼び出します。これは、自動リソース管理ブロック構文とともに使用できるように、クラスに追加されました。close
、インタフェース: AutoCloseable
IOException
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.