4. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
Deadlock
O que é?:
É quando uma Thread espera a execução de uma outra Thread e vice-versa.
Nesta situação, existe um processo de sincronia entre dois objetos
compartilhados.
5. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
package edu.anhanguera.prc.aula06;
public class DeadLock {
public static void main(String[] args) {
String carro1 = new String("Objeto 1");
String carro2 = new String("Objeto 2");
String carro3 = new String("Objeto 3");
Thread thread1 = new Thread(new Rodovia(carro1, carro2), "THREAD 1");
thread1.start();
Thread thread2 = new Thread(new Rodovia(carro2, carro3), "THREAD 2");
thread2.start();
Thread thread3 = new Thread(new Rodovia(carro3, carro1), "THREAD 3");
thread3.start();
}
}
6. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
package edu.anhanguera.prc.aula06;
public class Rodovia implements Runnable {
private String carro1;
private String carro2;
public Rodovia(String objeto1, String objeto2) {
this.carro1 = objeto1;
this.carro2 = objeto2;
}
public void run() {
System.out.println(Thread.currentThread().getName() + " - 1 - Lock no " + carro1);
synchronized (carro1) {
System.out.println(Thread.currentThread().getName() + " - 2 - Lock no " + carro2);
synchronized (carro2) {
System.out.println("Lock");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("Saindo do Lock");
}
}