请参考以下代码片段(将多余的部分切除以突出问题所在):

FindBugs抱怨“方法不能在所有路径上释放锁定”。这是假阳性吗?如果没有,该如何解决?

  try{
      someLock.lock();
     //do something
    } finally{
      if (someLock.isLocked())
        someLock.unlock();
    }

最佳答案

如果isLocked()扔东西,则您不会解锁。

我认为isLocked不会引发异常,但是锁定时必须解锁,测试没有意义。那么,为什么不使用the javadoc中描述的标准模式:

someLock.lock();
try{
    //do something
} finally{
    someLock.unlock();
}


所以我说


这是错误的肯定,因为您的代码无法解锁
在您应该根据建议修复代码的意义上说,这是一个真正的肯定。

10-08 03:08