Junior — Middle
Houve ocasiões em que enfrentou bloqueios mútuos de processos em sistemas?
sobes.tech IA
Resposta da IA
Sim, o deadlock (interbloqueio) é uma situação em que dois ou mais processos ou threads esperam indefinidamente pela liberação de recursos uns pelos outros.
Em Java, isso pode acontecer devido ao uso incorreto de sincronização, por exemplo, quando dois threads tentam adquirir dois objetos monitor em ordens diferentes.
Exemplo:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// trabalho
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// trabalho
}
}
});
t1.start();
t2.start();
Para evitar deadlock, é importante seguir uma ordem na aquisição de bloqueios e minimizar o tempo de retenção de recursos.