Ниже, если в syncMethod2 () происходит исключение, как я могу разблокировать объект блокировки?

public class ReEntrantLock {
ReentrantLock lock = new ReentrantLock();

void syncMethod1() {
  lock.lock();
  syncMethod2(); // throw new NullPointerException();
  lock.unlock();
}

}
1
Kanagavelu Sugumar 25 Авг 2011 в 18:26

2 ответа

Лучший ответ

Вы используете try - finally:

lock.lock();
try {
    syncMethod2(); // throw new NullPointerException();
} finally {
    lock.unlock();
}

Этот шаблон также описан в ReentrantLock JavaDoc.

1
Joachim Sauer 25 Авг 2011 в 14:29
public class ReEntrantLock {
    ReentrantLock lock = new ReentrantLock();

    void syncMethod1() {
        lock.lock();
        try {
            syncMethod2();
        } finally {
            lock.unlock();
        }
    }

}

Это прямо в документации ...

7
Jacob 25 Авг 2011 в 14:29