У меня есть код, как это:Возможные ошибки FindBugs: UL_UNRELEASED_LOCK_EXCEPTION_PATH?
public class Thingy {
private final Lock lock = new ReentrantLock();
private boolean shutdown;
public void shutdown() {
lock.lock();
shutdown = true;
lock.unlock();
}
}
И FindBugs жалуется, что «Thingy.shutdown() не освобождает блокировку на всех путях исключения», и что я должен обернуть shutdown = true;
линию в примерочных, наконец, но, как насколько я вижу, что это не может быть плохо.
Я ошибаюсь или это ложноположительно?
Кажется, что Firebug будет жаловаться на это, если вы не используете идиому, которую они задают в своих описаниях ошибок, блокируя разблокировку в блоке finally. Им, похоже, не важно, насколько ваш код находится в блокировке. – Riggy
лучший вопрос, почему бы просто не использовать блок try/finally? таким образом, когда код будет реорганизован в будущем и станет более чем тривиальным назначением, у вас не будет ошибки. – jtahlborn
@jtahlborn, но этот вопрос скучный :) Конечно, я добавлю попытку, наконец, но я все еще хочу знать, действительно ли это необходимо, и если да, то почему. –