Junior — Middle
In pratica, vengono utilizzati meccanismi come synchronized, wait e notifyAll per gestire i thread?
sobes.tech AI
Risposta dell'AI
Sì, nella pratica di programmazione Java, i meccanismi synchronized, wait e notifyAll vengono utilizzati per gestire i thread, soprattutto nei casi in cui è necessario implementare una sincronizzazione e coordinamento a basso livello tra thread.
- synchronized viene usato per garantire l'esclusione mutua nell'accesso alle risorse condivise.
- wait() fa sì che il thread corrente aspetti, rilasciando il monitor, finché un altro thread non chiama notify() o notifyAll().
- notifyAll() risveglia tutti i thread in attesa su quell'oggetto.
Tuttavia, nelle applicazioni moderne, si preferisce usare strumenti di livello superiore del pacchetto java.util.concurrent (ad esempio, Lock, Semaphore, CountDownLatch), poiché sono più flessibili e comodi.
Esempio di utilizzo di synchronized, wait e notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// continuare il lavoro
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}