UL_UNRELEASED_LOCK_EXCEPTION_PATH可能的FindBugs误报?

Chr*_*est 4 java concurrency findbugs thread-safety

我有这样的代码:

public class Thingy {
  private final Lock lock = new ReentrantLock();
  private boolean shutdown;
  public void shutdown() {
    lock.lock();
    shutdown = true;
    lock.unlock();
  }
}
Run Code Online (Sandbox Code Playgroud)

并且FindBugs抱怨说"Thingy.shutdown()不会释放所有异常路径上的锁"并且我应该shutdown = true;在try-finally中包装该行,但据我所知,没有办法可以解决这个问题.

我错了还是假阳性?

dty*_*dty 5

公平地说,通常相当棘手(不是完整的编译器并进行分析)来确定任何给定的代码片段是否可以抛出异常.

但我同意,在这种情况下,这是一个误报.即使它不是 - 即使JLS/JVM规范的某个黑暗角落说某个分配可以,不知何故,通过异常 - 如果你进入那个状态,你需要更多的担心而不是un - 释放锁!