O funcionamento do método wait()

voltar

 
 

No código abaixo, duas threads irão executar o código da class MyObject. No método ‘run’ pedimos para que se caso o nome da thread em execução seja igual a ‘Thread – 1’ então que seja executado o método ‘wait’.

 
 

Pode-se perceber que ao executar o método ‘wait’ a thread em execução, ou seja, a “Thread – 1” desiste do lock do próprio objeto, permitindo que a “Thread – 2” inicie sua execução.

 
 

O resultado é que o sistema fica “congelado” pela Thread – 1 esperando que ela seja notificada novamente para voltar a executar.

 
 

public class TestThread11 {

public static void main(String[] args){

MyObject o = new MyObject();

 
 

Thread t1 = new Thread(o,”Thread – 1″);

Thread t2 = new Thread(o,”Thread – 2″);

 
 

t1.start();

t2.start();

}

}

 
 

class MyObject implements Runnable {

@Override

public void run() {

if (Thread.currentThread().getName().equals(“Thread – 1”)){

try {

synchronized(this){

wait();

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.println(Thread.currentThread().getName());                

}

}

Output:

Thread – 2

(sistema fica “congelado” esperando a ‘Thread – 1’ ser notificada (notify) para que possa voltar a executar)

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 )

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