|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.channels.FileLock
public abstract class 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 Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。