我编写了一个实现“锁定文件”的 Java 类,以防止一个周期作业同时运行多次。它基于java.nio.channels.FileChannel.tryLock
并且运行良好。
我的类允许客户端代码提供一个超时值,指示它愿意等待锁定文件可用多长时间,如果发生超时,我将抛出一个IOException
. 这也很有效。
但我想知道是否有更好的异常类型可以使用,因为IOException
它相当通用。捕获 an 的客户端代码IOException
将无法知道问题是由于例如超时本身还是文件系统的其他问题等(IOException
当然,除非其他问题引发子类)。
简要浏览 Java API,我看到了一些候选者,但出于各种原因,我并不真正喜欢它们中的任何一个:
java.util.concurrent.TimeoutException
(这不是真正的“并发”用法)java.nio.channels.FileLockInterruptionException
(文档指出了此异常的一个非常具体的原因;与我的情况不符)java.nio.channels.InterruptedByTimeoutException
(与上述类似的原因)
有什么建议么?
如果可能的话,我更喜欢 Java 7 可用的东西。
编辑
显然,自定义异常类是可能的,但我想知道标准 API 中是否有合适的东西。