Download - Programação Concorrente - Aula 06
![Page 2: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/2.jpg)
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
DEADLOCK
![Page 3: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/3.jpg)
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
O que acontece nessa imagem?
![Page 4: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/4.jpg)
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
DeadlockO 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.
![Page 5: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/5.jpg)
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(); }
}
![Page 6: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/6.jpg)
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");
}}
![Page 7: Programação Concorrente - Aula 06](https://reader038.vdocuments.mx/reader038/viewer/2022103010/58ee4daf1a28ab574c8b462b/html5/thumbnails/7.jpg)
Obrigado !!!
ANHANGUERA – 2016.1