Sobes.tech
Junior — Middle

V čom sa líšia mechanizmy ReentrantLock a synchronized pri správe vlákien?

sobes.tech AI

Odpoveď od AI

Hlavné rozdiely medzi ReentrantLock a synchronized:

  • Flexibilita: ReentrantLock ponúka viac možností, napríklad možnosť prerušiť čakanie na zámok (lockInterruptibly), pokus o získanie zámku s časovým limitom (tryLock), zatiaľ čo synchronized tieto možnosti nemá.

  • Reentrancia: oba mechanizmy podporujú reentranciu, teda vlákno, ktoré už vlastní zámok, si ho môže znovu získať bez blokovania.

  • Správa zámku: synchronized je blok alebo metóda, kde JVM automaticky spravuje získanie a uvoľnenie zámku. ReentrantLock vyžaduje explicitné volania lock() a unlock(), čo poskytuje väčšiu kontrolu, ale je potrebné byť opatrný.

  • Výkon: v niektorých prípadoch môže byť ReentrantLock efektívnejší, najmä pri vysokej konkurencii vlákien, ale záleží od implementácie JVM.

Príklad použitia ReentrantLock:

ReentrantLock lock = new ReentrantLock();

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