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