Esplicação simples sobre Threads

3 respostas
anderson.bonavides
public class DeadlockRisk {

private static class Resouce{		

public int value;

}

private Resouce resouceA = new Resouce();

private Resouce resouceB = new Resouce();

public int read(){

synchronized (resouceA) { //Pode haver impasse aqui

synchronized (resouceB) {

return resouceB.value + resouceA.value;

}

}

}

public void wriete(int a, int b){//Pode haver impasse aqui

synchronized (resouceB) {

synchronized (resouceA) {

resouceA.value = a;

resouceB.value = b;

}

}

}

}

Bem na esplicação não compreendi muito o motivo de DeadLock neste algoritimo.

O metodo de leitura tem o bloqueio de resouceA e está acesando a Thread que tem o bloqueio de resouceB

O metodo de gravação tem o bloqueio de resouceB e está acesando a Thread que tem o bloqueio de resouceA

E ambos estão esperando que a liberação um do outro, é isso?

3 Respostas

LPJava

no link abaixo explica algo bastante essencial veja la e altera o titulo para “Explicação sobre Threads”.

http://www.guj.com.br/posts/list/50115.java

ViniGodoy

Ok. Imagine o seguinte.

A Thread 1 chama o método read, e adquire o lock “resourceA”.
Logo em seguida a Thread 2 entra em ação, chama o método write e adquire o lock “resourceB”.

Tente sair desse impasse.
Se a thread 2 tentar continuar, ela deverá esperar “resourceA”, que está preso com a Thread 1.
Se a thread 1 tentar continuar, ela deverá esperar “resourceB”, que está preso com a Thread 2.

Como um depende da liberação do outro para prosseguir, o sistema está em deadlock.

Eu recomendo a leitura desse artigo (em inglês):

anderson.bonavides

Ficou perfeita a explicação de DeadLock, compreendi o conceito de DeadLock mas não tinha conseguido vizualizar na questão. Devido ao artigo ser em inglês vou tentar ler sim, mas confeso que meu inglês é muito pobre.

:frowning:

Criado 28 de agosto de 2007
Ultima resposta 28 de ago. de 2007
Respostas 3
Participantes 3