期間ジョブが同時に複数回実行されるのを防ぐために、「ロック ファイル」を実装する Java クラスを作成しました。それは基づいてjava.nio.channels.FileChannel.tryLock
おり、非常にうまく機能します。
私のクラスでは、クライアント コードで、ロック ファイルが使用可能になるまで待機する時間を示すタイムアウト値を指定できます。タイムアウトが発生した場合は、IOException
. これも非常にうまく機能します。
しかし、かなり一般的であるため、使用するより良い例外タイプがあるかどうか疑問に思っています。IOException
をキャッチするクライアントコードIOException
は、問題がタイムアウト自体によるものなのか、ファイルシステムの他の問題などによるものなのかを知ることができません(IOException
もちろん、他の問題がサブクラスをスローしない限り)。
Java API をざっと見てみると、候補がいくつかありますが、さまざまな理由からあまり好きではありません。
java.util.concurrent.TimeoutException
(これは実際には「同時」使用法ではありません)java.nio.channels.FileLockInterruptionException
(ドキュメントは、この例外の非常に具体的な理由を示しています; 私の場合とは一致しません)java.nio.channels.InterruptedByTimeoutException
(上記と同様の理由)
助言がありますか?
可能であれば、Java 7 に戻って利用できるものを希望します。
編集
明らかに、カスタム例外クラスは可能ですが、標準 API に適切なものがあるかどうか疑問に思っていました。