AutoLock en Java: ¿cómo hacerlo?
-
02-07-2019 - |
Pregunta
¿Cuál es la mejor manera de liberar recursos (en este caso, desbloquear el ReadWriteLock) al salir del alcance? ¿Cómo cubrir todas las formas posibles (devolución, pausa, excepciones, etc.)?
Solución
Un bloque try / finally es lo más parecido que puede obtener a este comportamiento:
Lock l = new Lock();
l.lock(); // Call the lock before calling try.
try {
// Do some processing.
// All code must go in here including break, return etc.
return something;
} finally {
l.unlock();
}
Otros consejos
Como dijo Mike, finalmente debes elegir un bloque. vea el finalmente bloquee el tutorial , donde se indica :
El bloque finalmente siempre se ejecuta cuando el bloque de prueba sale. Esto asegura que el bloque finalmente se ejecuta incluso si se produce una excepción inesperada.
Una mejor manera de hacerlo es usar la instrucción try-with-resources, que le permite imitar Mecanismo RAII :
public class MutexTests {
static class Autolock implements AutoCloseable {
Autolock(ReentrantLock lock) {
this.mLock = lock;
mLock.lock();
}
@Override
public void close() {
mLock.unlock();
}
private final ReentrantLock mLock;
}
public static void main(String[] args) throws InterruptedException {
final ReentrantLock lock = new ReentrantLock();
try (Autolock alock = new Autolock(lock)) {
// Whatever you need to do while you own the lock
}
// Here, you have already released the lock, regardless of exceptions
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow