那么,问题是 - 处理这种情况的正确策略是什么?从目前的角度来看,我只看到三个选项(每个选项都有一定的风险):
1. 在lock / tryLock / unlock方法中忽略中断异常,重试/返回false/假设即使请求没有到达目的地,TTL最终会解锁记录。这显然不是最好的解决方案,因为它希望一切都能顺利进行,而不是解决问题。 2. 包装在RuntimeException子类中。这似乎也是可怕的解决方案,因为客户端代码将必须使用具体的实现而不是原始接口,并且未经检查的异常肯定不是为这样的目的而设计的。 3. 使用“强制”Thread.currentThread().interrupt()调用。我不喜欢这种方式,因为它基本上告诉线程处理自己的中断而不是传递有关调用被中断的通知;此外,据我所知,如果没有外部轮询,它将使线程最终但不是立即处理中断,可能在完全不同的位置。
(当然,还有一种选项是允许客户端代码配置所需的行为,但这仍然不能为我提供真正好的解决方案)
是否有比我描述的更好的方法?如果没有,哪个选项应优先考虑?