String fornecendo ‘lock’ para thread. CUIDADO !!! Objetos diferentes no heap !

Repare, neste código, que o output sai indefinido devido a sincronização com uma String. Lembre-se que no heap, cada string é um objeto diferente, portanto os locks fornecidos para as 3 threads (MBThead) serão de objetos diferentes.

 
 

 
 

 
 

import java.lang.Thread;

 
 

public class Teste {

public static void main(String[] args){

MBThread first, second, third;

Teste orderedThrea d = new Teste();

first = new MBThread(“one”,orderedThread);

second = new MBThread(“second”,orderedThread);

third = new MBThread(“third”,orderedThread);

second.start();

first.start();

third.start();

}        

public void display(String msg){

synchronized(msg){

for(int i = 0; i < 20; i++){

System.out.println(msg);

}

}

}

}

 
 

class MBThread extends Thread {

String name;

Teste orderT;

MBThread (String name, Teste orderT){

this.orderT = orderT;

this.name = name;

}

public void run(){

this.orderT.display(name);

}

}

Output:

one

second

{vários second}

second

one

{vários one}

one

second

third

{vários third}

third

second

second

one

{vários one}

Anúncios
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 )

Google+ photo

Está a comentar usando a sua conta Google+ 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 )

Connecting to %s