多分これは役に立ちます!
public abstract FileLock tryLock(long position,
long size,
boolean shared)
throws IOException
このチャネルのファイルの特定の領域でロックを取得しようとします。
このメソッドはブロックしません。呼び出しは、要求されたリージョンのロックを取得したか、ロックを取得できなかったかのいずれかで、常にすぐに戻ります。重複するロックが別のプログラムによって保持されているためにロックの取得に失敗した場合、nullを返します。その他の理由でロックの取得に失敗した場合は、適切な例外がスローされます。
位置とサイズのパラメーターで指定された領域は、実際の基になるファイル内に含まれている必要はなく、重複している必要もありません。ロック領域のサイズは固定されています。ロックされた領域に最初にファイルの終わりが含まれていて、ファイルがその領域を超えて大きくなる場合、ファイルの新しい部分はロックの対象になりません。ファイルのサイズが大きくなることが予想され、ファイル全体をロックする必要がある場合は、ゼロから始まり、ファイルの予想される最大サイズ以上の領域をロックする必要があります。引数なしのtryLock()
方法は、サイズの領域をロックするだけです
Long.MAX_VALUE
。
一部のオペレーティングシステムは共有ロックをサポートしていません。その場合、共有ロックの要求は自動的に排他ロックの要求に変換されます。新しく取得したロックが共有されているか排他的であるかは、結果のロックオブジェクトのisSharedメソッドを呼び出すことによってテストできます。
ファイルロックは、Java仮想マシン全体に代わって保持されます。同じ仮想マシン内の複数のスレッドによるファイルへのアクセスを制御するのには適していません。
パラメータ:position-ロックされた領域が開始する位置。負でないサイズである必要があります-ロックされた領域のサイズ。非負である必要があり、合計位置+サイズは非負である必要があります共有-共有ロックを要求する場合はtrue、排他ロックを要求する場合はfalse戻り値:新しく取得したロックを表すロックオブジェクト、またはロックが可能である場合はnull別のプログラムが重複するロックを保持しているため、取得されませんスロー:
IllegalArgumentException
-パラメータの前提条件が保持されない
ClosedChannelException
場合-このチャネルが閉じている場合
OverlappingFileLockException
-要求された領域と重複するロックがこのJava仮想マシンによってすでに保持されている場合、またはこのメソッドで別のスレッドがすでにブロックされており、同じファイルの重複領域をロックしようとしている
IOException
場合-他のI/Oエラーが発生した場合を参照してください。また
:lock()
、、lock(long,long,boolean)
tryLock()