Sobes.tech
Junior — Middle

Quais são as diferenças entre os mecanismos ReentrantLock e synchronized na gestão de threads?

sobes.tech IA

Resposta da IA

As principais diferenças entre ReentrantLock e synchronized:

  • Flexibilidade: ReentrantLock oferece mais possibilidades, por exemplo, a capacidade de interromper a espera pelo bloqueio (lockInterruptibly), tentar adquirir o bloqueio com um timeout (tryLock), enquanto synchronized não possui essas funcionalidades.

  • Reentrância: ambos os mecanismos suportam reentrância, ou seja, um thread que já possui o bloqueio pode adquiri-lo novamente sem bloquear.

  • Gestão do bloqueio: synchronized é um bloco ou método onde a JVM gerencia automaticamente a aquisição e liberação do bloqueio. ReentrantLock requer chamadas explícitas a lock() e unlock(), o que oferece maior controle, mas exige cuidado.

  • Desempenho: em alguns casos, ReentrantLock pode ser mais eficiente, especialmente em alta concorrência entre threads, embora isso dependa da implementação da JVM.

Exemplo de uso do ReentrantLock:

ReentrantLock lock = new ReentrantLock();

lock.lock();
try {
    // seção crítica
} finally {
    lock.unlock();
}