Junior — Middle
Používajú sa v praxi mechanizmy ako synchronized, wait a notifyAll na riadenie vlákien?
sobes.tech AI
Odpoveď od AI
Áno, v praxi programovania v jazyku Java sa mechanizmy synchronized, wait a notifyAll používajú na riadenie vlákien, najmä v prípadoch, keď je potrebné implementovať nízkoúrovňovú synchronizáciu a koordináciu medzi vláknami.
- synchronized sa používa na zabezpečenie vzájomného vylúčenia pri prístupe ku zdieľaným zdrojom.
- wait() spôsobí, že aktuálne vlákno čaká, uvoľní monitor, kým iné vlákno nevolá notify() alebo notifyAll().
- notifyAll() prebudí všetky vlákna čakajúce na danom objekte.
Avšak v moderných aplikáciách sa častejšie používajú vyššie úrovne nástrojov z balíka java.util.concurrent (napríklad Lock, Semaphore, CountDownLatch), pretože sú flexibilnejšie a pohodlnejšie.
Príklad použitia synchronized, wait a notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// pokračovať v práci
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}