Sobes.tech
Junior — Middle

V čem se liší mechanismy ReentrantLock a synchronized při správě vláken?

sobes.tech AI

Odpověď od AI

Hlavní rozdíly mezi ReentrantLock a synchronized:

  • Flexibilita: ReentrantLock nabízí více možností, například možnost přerušit čekání na zámek (lockInterruptibly), pokusit se získat zámek s časovým limitem (tryLock), zatímco synchronized tyto možnosti nemá.

  • Reentrance: oba mechanismy podporují reentranci, tj. vlákno, které již vlastní zámek, si ho může znovu získat bez blokování.

  • Správa zámku: synchronized je blok nebo metoda, kde JVM automaticky spravuje získání a uvolnění zámku. ReentrantLock vyžaduje explicitní volání lock() a unlock(), což poskytuje větší kontrolu, ale je třeba být opatrný.

  • Výkon: v některých případech může být ReentrantLock efektivnější, zejména při vysoké konkurenci vláken, ale záleží na implementaci JVM.

Příklad použití ReentrantLock:

ReentrantLock lock = new ReentrantLock();

lock.lock();
try {
    // kritická sekce
} finally {
    lock.unlock();
}