Deadlock

 

Deadlocking can occur when a locked object attempts to access another locked object that is trying to access the first locked object. In other words, both threads are waiting for each other’s locks to be released; therefore, the locks will never be released!

 

 

public class MyDeadlock2 {

public static void main(String[] args){

final Object lock1 = new Object();

final Object lock2 = new Object();

 
 

Thread t1 = new Thread(){

@Override

public void run() {

System.out.println(Thread.currentThread().getName() + ” vai solicitar: lock1″);

synchronized(lock1){

System.out.println(Thread.currentThread().getName() + ” solicitou lock: lock1″);

 
 

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

 
 

System.out.println(Thread.currentThread().getName() + ” vai solicitar: lock2″);

synchronized(lock2){

System.out.println(Thread.currentThread().getName() + ” solicitou lock: lock2″);

}

}

}

};

 
 

Thread t2 = new Thread(){

@Override

public void run() {

System.out.println(Thread.currentThread().getName() + ” vai solicitar: lock2″);

synchronized(lock2){

System.out.println(Thread.currentThread().getName() + ” solicitou lock: lock2″);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() + ” vai solicitar: lock1″);

synchronized(lock1){

System.out.println(Thread.currentThread().getName() + ” solicitou lock: lock1″);

}

}

}

};

 
 

t1.start();

t2.start();

}

}

Output

Thread-0 vai solicitar: lock1

Thread-1 vai solicitar: lock2

Thread-1 solicitou lock: lock2

Thread-0 solicitou lock: lock1

Thread-0 vai solicitar: lock2

Thread-1 vai solicitar: lock1

(programa fica travado)

Esta entrada foi publicada em Threads com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s