FileLock.lockは、ファイルのロック権限を取得するメソッドです。


このFileLock.lockメソッド、

ロック権限が取得できない場合、

ロック権限が取得できるまで、

ずっと待ちの状態になります。


もし、なんらかの理由で、ファイルのロック権限が

残ってしまった場合のことを考えてみます。

もひとつ、FileLock.lockを使用するメソッドでsynchronizedを使っているとします。


あるスレッドAから、FileLock.lockを使用するメソッドを

呼び出したときに、そのスレッドはFileLock.lockで待ちの状態になります。

別のスレッドBから、FileLock.lockを使用するメソッドを

呼び出すと、synchronizedで待ちの状態になります(スレッドAがsynchronizedの権利をもっているから)。

で、多くのスレッドから呼ばれると、処理がずんずんたまり、

OutOfMemoryが起こったりします。

こういう状態を巷では、「ささる」というらしいです!(-ω-)



こういうことが起こることが予想される場合は、

FileLock.lockではなく、FileLock.tryLockを使いましょう~


tryLockをfor文でまわして、何度かやっても取れなければ

ファイルロックできなかったときの処理(エラーにするとか・・・

どうするかはアナタ次第..(><))を書けばOKです。



今日はここまで。
でわでわ( ̄▽ ̄)/