|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.nio.channels.FileLock
ファイル領域上のロックを示すトークンです。
FileChannel
クラスの lock
メソッドや tryLock
メソッドを使ってファイル上にロックを獲得すると、そのたびにファイルロックオブジェクトが作成されます。
ファイルロックオブジェクトは最初から有効であり、release
メソッドの呼び出し、ロックの獲得に使用したチャネルのクローズ、Java 仮想マシンの終了などによって解放されるまで、その状態を保持します。ロックの有効性は、isValid
メソッドを呼び出すことによって確認できます。
ファイルロックには「排他ロック」と「共有ロック」があります。共有ロックの場合、同時に実行されているその他のプログラムは、オーバーラップする排他ロックを獲得できません。オーバーラップする共有ロックであれば獲得可能です。一方、排他ロックの場合、どちらの種類のロックも獲得できません。ロックを解放すると、その他のプログラムによって獲得されるロックへの影響はなくなります。
排他ロックであるか共有ロックであるかは、isShared
メソッドを呼び出すことで判断できます。共有ロックをサポートしないプラットフォームでは、共有ロック要求は自動的に排他ロック要求に変換されます。
単一の Java 仮想マシンによって特定のファイル上に保持されているロックは、オーバーラップしません。候補となるロックの範囲が既存のロックをオーバーラップするかどうかは、overlaps
メソッドで確認できます。
ファイルロックオブジェクトは、ロックを保持しているファイル、ロックの種類と有効性、ロックされた領域の位置とサイズに関するファイルチャネル情報を記録します。時間の経過とともに変化するのは、ロックの有効性だけです。その他のロック状態は不変です。
ファイルロックは Java 仮想マシン全体のために保持されます。これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するには適していません。
ファイルロックオブジェクトは、複数の並行スレッドで安全に使用できます。
このファイルロック API は、基本となるオペレーティングシステムのネイティブのロック機能に直接マッピングされます。このため、ファイルにアクセスできるあらゆるプログラムが、作成に使用された言語とは関係なく、このファイル上に保持されたロックを認識します。
ロックされた領域のコンテンツにその他のプログラムからアクセスできなくなるかどうかは、システムによって決まるため未指定です。ネイティブのファイルロックとして、「アドバイザリロック」しかサポートしないシステムもあります。こうしたシステムでは、データの完全性を保証するため、プログラムを使って既知のロックプロトコルを監視する必要があります。一方、ネイティブのファイルロックが「必須ロック」というシステムもあります。この場合、あるプログラムによってファイル領域がロックされているとき、その他のプログラムからロックを破ってアクセスすることはできません。このほか、ネイティブのファイルロックをアドバイザリロックにするか必須ロックにするかをファイル単位で選択できるシステムもあります。プラットフォーム間の動作の一貫性と正確性を確保するためには、この API の提供するロックをアドバイザリロックとして使用することを強くお勧めします。
システムによっては、ファイル領域上で必須ロックを獲得すると、その領域を システムによっては、チャネルをクローズすると、基本となるファイル上で Java 仮想マシンによって保持されていたロックが、そのチャネルから獲得したか同じファイル上でオープンしている別のチャネルから獲得したかに関係なく、すべて解除される場合があります。単一のプログラム内では、指定されたファイル上のすべてのロックを一意のチャネルで獲得することを強くお勧めします。
一部のネットワークファイルシステムでは、ロックされた領域がページ型で、基本となるハードウェアのページサイズの完全倍数である場合にかぎり、ファイルロックをメモリマップで使用することができます。また別のネットワークファイルシステムでは、特定の位より上 (通常 230 または 231) の領域上のファイルロックが実装されません。一般に、ネットワークファイルシステム上のファイルをロックするときは、細心の注意を払う必要があります。
プラットフォームの依存性
できなくなる場合、または反対にメモリを領域にマップできなくなる場合があります。ロックとマッピングの両方を組み合わせて使用するプログラムでは、この組み合わせを確実に準備する必要があります。
メモリにマップ
コンストラクタの概要 | |
protected |
FileLock(FileChannel channel,
long position,
long size,
boolean shared)
このクラスの新しいインスタンスを初期化します。 |
メソッドの概要 | |
FileChannel |
channel()
このロックが保持されているファイルを持つファイルチャネルを返します。 |
boolean |
isShared()
このロックが共有ロックであるかどうかを判断します。 |
abstract boolean |
isValid()
このロックが有効であるかどうかを判断します。 |
boolean |
overlaps(long position,
long size)
このロックが指定されたロック範囲をオーバーラップしているかどうかを判断します。 |
long |
position()
ファイル内のロックされた領域の最初のバイトの位置を返します。 |
abstract void |
release()
このロックを解除します。 |
long |
size()
ロックされた領域のサイズをバイトで返します。 |
String |
toString()
このロックの範囲、種類、有効性を説明する文字列を返します。 |
クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
コンストラクタの詳細 |
protected FileLock(FileChannel channel, long position, long size, boolean shared)
channel
- このロックが保持されているファイルを持つファイルチャネルposition
- ファイル内のロックされた領域の開始位置。負の値以外size
- ロック領域のサイズ。負の値以外。position + size の合計も負の値以外shared
- このロックが共有ロックの場合 true、排他ロックの場合 false
IllegalArgumentException
- 上記のパラメータの前提条件が満たされていない場合メソッドの詳細 |
public final FileChannel channel()
public final long position()
ロックされた領域が基本となるファイルに含まれている必要はありません。また、基本となるファイルをオーバーラップしている必要もありません。このメソッドは、現在のファイルサイズ以上の値を返すことがあります。
public final long size()
ロックされた領域が基本となるファイルに含まれている必要はありません。また、基本となるファイルをオーバーラップしている必要もありません。このメソッドは、現在のファイルサイズ以上の値を返すことがあります。
public final boolean isShared()
public final boolean overlaps(long position, long size)
public abstract boolean isValid()
ロックオブジェクトは、ロックが解放されるか、関連したファイルチャネルがクローズされるまで有効です。
public abstract void release() throws IOException
このメソッドを呼び出すと、ロックオブジェクトが有効ならロックが解除され、無効になります。ロックオブジェクトが無効なら変化はありません。
ClosedChannelException
- このロックの獲得に使用したチャネルがオープンしていない場合
IOException
- 入出力エラーが発生した場合public final String toString()
Object
内の toString
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.