Sobes.tech
Junior — Middle

São utilizados na prática mecanismos como synchronized, wait e notifyAll para gerir threads?

sobes.tech IA

Resposta da IA

Sim, na prática de programação Java, os mecanismos synchronized, wait e notifyAll são utilizados para gerir threads, especialmente em casos onde é necessário implementar sincronização e coordenação de baixo nível entre threads.

  • synchronized é usado para garantir exclusão mútua ao aceder a recursos partilhados.
  • wait() faz com que o thread atual espere, libertando o monitor, até que outro thread chame notify() ou notifyAll().
  • notifyAll() acorda todos os threads que estão à espera nesse objeto.

No entanto, em aplicações modernas, costuma-se usar ferramentas de nível superior do pacote java.util.concurrent (por exemplo, Lock, Semaphore, CountDownLatch), pois são mais flexíveis e convenientes.

Exemplo de uso de synchronized, wait e notifyAll:

class SharedResource {
    private boolean ready = false;

    public synchronized void waitForReady() throws InterruptedException {
        while (!ready) {
            wait();
        }
        // continuar o trabalho
    }

    public synchronized void setReady() {
        ready = true;
        notifyAll();
    }
}