Mais uma de threads

3 respostas
R

O que vai acontecer quando o código for executado?

package teste;

public class Teste extends Thread {
  public void run() {
    metodo();
  }
  
  public synchronized void metodo() {
    try {
      wait();      
    }
    catch (InterruptedException e) {}
    
    outroMetodo();
    System.out.println("Done");
  }
  
  public void outroMetodo() {
    System.out.println("outroMetodo");
  }
  
  public static void main(String[] args) {
    Teste t = new Teste();
    t.start();
    
    try {
      Thread.sleep(5000);
    }
    catch (InterruptedException e) {}
    
    t.interrupt();    
  }
}

3 Respostas

D
  1. Thread dorme por 5 Segundos // Thread.sleep(5000);
  2. Entra no método metodo
  3. Chama o método outroMetodo
  4. imprime outroMetodo
  5. Imprime Done
S

Diogo, o 1 e o 2 não estão invertidos?
Primeiro entra em metodo, fica bloqueado.
Volta ao main, dorme, acorda e interrompe t.

Depois o 3, 4 e 5 que você falou.

F

Então,

analisando o código e considerando o ciclo de vida de um Thread,

temos:

Teste t = new Teste();
//Deixa o segmento pronto para entrar no estado executável

t.start();
//Torna o segmento no estado executável, informando que se puder
//ser processado , ele pode.

então , ele entra no estado executando … que é nada mais do que chamar
o método run();

como no método run() existe um wait();

ele ficará esperando , e no main() , existe uma chamada ao método

interrupt() , mas antes de chamá-lo , o segmento dorme (sleep(5000))

por 5 segundos , isso para dar tempo de entrar no método run() e chamar

o wait(); eh tempo suficiente para isso.

E quando esse tempo acaba , segue o fluxo do main(), sabendo que

já existe uma espera na execução do segmento wait(), e em nenhum lugar

do código , não foi chamado notify() ou notifyAll(),

então é executado o interrupt()., que verifica se existe algum Thread aguardando ser notificado  ,e faz ele ser notificado.

Logo sairá:

outroMetodo
Done

é isso!

Criado 19 de janeiro de 2005
Ultima resposta 24 de jan. de 2005
Respostas 3
Participantes 4