Parar um Thread, executar outra, e voltar.(Maneira correta?)

3 respostas
Z

Pessoal,
Tenho o seguinte código.

///inicio do programa.....
boolean espera = true;
Thread thread1 = new Thread(){
			    public void run(){
				Classe1 tabela = new Classe1(listaColunasTabela ,listaCabecalhoArquivo);
				while(espera){
				  ///
				}
			    }
			};
			thread1.start();

			synchronized (thread1){
			    while (espera){
				thread1.wait();
				System.out.println(espera);
			    }
			};
			System.out.println("saiu");
/// resto do programa...

A classe ‘Classe1’ é um frame em que escolho algumas opções para o meu programa e dou OK. (pressiono um botão, seto a variável ‘espera’ para false)
O questão é: gostaria que ao abrir a classe ‘Classe1’ , a Thread Principal que a chamou parasse e esperasse até o OK da classe ‘Classe1’ para continuar.
Sem o while que está dentro do run da thread1, o programa imprime uma vez ‘true’ e mais nada, para onde foi o fluxo do programa?
Coloquei o while e está funcionando pq ele segura a execução do programa até que eu set a variável espera para false (dar OK).
Acredito não ser a maneira correta, será??
valeu.

3 Respostas

ViniGodoy

Se a thread1 morre após sua execução, acho que a maneira mais fácil de você fazer isso é usar thread1.join().

Me diga uma coisa… por que ao invés de um JFrame, você não faz a Classe1 ser um JDialog modal? A execução para até um JDialog modal ser fechada.

Z

Valeu ViniGodoy,
Blz :lol: …
O JDialog resolveu o meu problema…
o join também é uma boa…

mas ‘apenas’ pra conhecimento, com relação a pergunta do fluxo do programa que não imprime mais ‘true’ dentro do loop e nem imprime ‘saiu’, o que seria?

valeu…

ViniGodoy

Provavelmente sua thread não saiu do wait.

Para ela sair do wait, você teria ou que dar um notify() ou notifyAll(), ou esperar por um spurious wakeup (que nunca se sabe quando vai acontecer), ou colocar um wait com tempo.

Criado 27 de dezembro de 2007
Ultima resposta 27 de dez. de 2007
Respostas 3
Participantes 2