Sobes.tech
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();
    }
}