Junior — Middle
Se utilizează în practică mecanisme precum synchronized, wait și notifyAll pentru gestionarea firelor de execuție?
sobes.tech AI
Răspuns de la AI
Da, în practica programării Java, mecanismele synchronized, wait și notifyAll sunt utilizate pentru gestionarea firelor de execuție, în special în cazurile în care este necesară implementarea sincronizării și coordonării la nivel scăzut între fire.
- synchronized este folosit pentru a asigura excluderea reciprocă la accesarea resurselor partajate.
- wait() face ca firul curent să aștepte, eliberând monitorul, până când alt fir apelează notify() sau notifyAll().
- notifyAll() trezește toate firele care așteaptă pe acel obiect.
Totuși, în aplicațiile moderne, se folosesc mai frecvent instrumente de nivel superior din pachetul java.util.concurrent (de exemplu, Lock, Semaphore, CountDownLatch), deoarece sunt mai flexibile și mai convenabile.
Exemplu de utilizare a synchronized, wait și notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// continuă cu munca
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}