Java · Avançado · Inglês · Técnico
ReentrantLock
Lock explícito de java.util.concurrent que a mesma thread pode readquirir e que oferece tryLock, timeout, interrupção e condições, além do que o synchronized dá.
Onde usar
Aparece quando o synchronized não basta: tentar o lock sem bloquear ou liberar em outro escopo. Sempre com unlock em finally.
Em código
var lock = new ReentrantLock();
if (lock.tryLock(1, TimeUnit.SECONDS)) {
try {
// seção crítica
} finally {
lock.unlock();
}
}Exemplos
Use tryLock with a timeout instead of blocking forever.
Use tryLock com timeout em vez de bloquear para sempre.
Always release the ReentrantLock in a finally block.
Sempre libere o ReentrantLock num bloco finally.
Cuidado
Esquecer o unlock() ou colocá-lo fora do finally deixa o lock preso para sempre depois de uma exceção.
Sinônimos
lock reentrante