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();
}