AutoLock in Java - come?
-
02-07-2019 - |
Domanda
Qual è il modo migliore per liberare risorse (in questo caso sbloccare ReadWriteLock) quando si lascia l'ambito? Come coprire tutti i modi possibili (ritorno, interruzione, eccezioni ecc.)?
Soluzione
Un blocco try / finally è la cosa più vicina a questo comportamento:
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();
}
Altri suggerimenti
Come ha detto Mike, un blocco finalmente dovrebbe essere la tua scelta. vedere il infine bloccare il tutorial , dove è indicato :
Il blocco finally sempre viene eseguito quando il blocco try viene chiuso. Questo lo assicura il blocco finally viene eseguito anche se si verifica un'eccezione imprevista.
Un modo migliore per farlo è usare l'istruzione try-with-resources, che ti permette di imitare il Meccanismo 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
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow