Join() throws InterruptedException

1 resposta
Raulen_Rodrigues_da_

A dúvida é simples: O livro da Kathy afirma que o comportamento da funcionalidade do join() não é garantida, porém eu li na internet que era, daí fazendo alguns testes eu constatei, que o comportamento da aplicação fica constante, pelo menos as 30 vezes q eu executei, ele imprimiu o esperado!!!
Afinal de contas o comportamento é ou não garantido???w

1 Resposta

rodrigo.bossini

Raulen Rodrigues da Cunha:
A dúvida é simples: O livro da Kathy afirma que o comportamento da funcionalidade do join() não é garantida, porém eu li na internet que era, daí fazendo alguns testes eu constatei, que o comportamento da aplicação fica constante, pelo menos as 30 vezes q eu executei, ele imprimiu o esperado!!!
Afinal de contas o comportamento é ou não garantido???w

public static void main (String ...args){

Thread t = new Thread();
t.start();
t.join();
}

A thread main espera até que a thread referenciada por t termine sua execução para pode prosseguir. Sempre. Invariavelmente.
Exemplo:

public class Main {

	
	public static void main(String[] args)throws Exception {
		System.out.println ("Início de main.");
		Thread t = new Thread (new Runnable (){@Override
		public void run() {
			System.out.println ("Início da thread auxliar");
			try{
				Thread.sleep(100000);
			}
			catch (Exception e){
				e.printStackTrace();
			}
			System.out.println ("Fim da thread auxiliar");
		}});
		t.start();
		t.join();
		System.out.println ("Fim de main");
		

	}

}

A saída deste programa SEMPRE será:
Início de main.
Início da thread auxliar
Fim da thread auxiliar
Fim de main
Perceba que a thread auxiliar dorme por um tempo considerável, porém, graças ao join, a thread main não executa até que a auxiliar termine seu método run.

Agora, o que pode acontecer é a thread auxiliar ter sido interrompida em algum momento antes de main invocar join. Neste caso uma InterruptedException é lançada.

Criado 24 de janeiro de 2010
Ultima resposta 24 de jan. de 2010
Respostas 1
Participantes 2