Junior — Middle
Ar praktikoje naudojami tokie mechanizmai kaip synchronized, wait ir notifyAll, norint valdyti srautus?
sobes.tech AI
Atsakymas iš AI
Taip, Java programavimo praktikoje mechanizmai synchronized, wait ir notifyAll naudojami valdyti gijas, ypač tada, kai reikia įgyvendinti žemo lygio sinchronizaciją ir koordinavimą tarp gijų.
- synchronized naudojamas užtikrinti tarpusavio išskirtinumą prieinant prie bendrų išteklių.
- wait() leidžia dabartinei gijai laukti, laisvinant monitorių, kol kita gija iškvies notify() arba notifyAll().
- notifyAll() pažadina visas laukiancias gijas tame objekte.
Tačiau šiuolaikiniuose taikymuose dažniau naudojami aukštesnio lygio įrankiai iš java.util.concurrent paketo (pvz., Lock, Semaphore, CountDownLatch), nes jie yra lankstesni ir patogesni.
Pavyzdys, kaip naudoti synchronized, wait ir notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// tęsti darbą
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}