Thread parar uma Thread até que outra termine o serviço
4 respostas
rafaelbtz
Salve GUJ,
Estou precisando resolver um problema com Threads mas não estou conseguindo é o seguinte:
Threadt1=newThread(){...t1.start();System.out.println("Só imprimir isso depois que a t1 terminar a execução");
Alguem conhece alguma maneira de fazer isso ai em cima, ou seja eu quero que o processo de imprimir a linha só ocorra depois que a t1 terminar todo o seu processamento.
thingol, valeu pela dica eu vou dar uma procurada pra ver como funciona esse join porque eu nunca usei se vc puder me passar algum exemplo…
T
thingol
classThreadExemploimplementsRunnable{publicvoidrun(){System.out.println("Thread Exemplo processando ...");try{Thread.sleep(3000);}catch(InterruptedExceptionex){}// simulando processamento pesadoSystem.out.println("Thread Exemplo acabou o processamento.");}}classExemploJoin{publicstaticvoidmain(String[]args){System.out.println("Início");Threadth=newThread(newThreadExemplo());System.out.println("Iniciando a thread exemplo...");th.start();System.out.println("Esperando a thread exemplo acabar de processar...");try{th.join();}catch(InterruptedExceptionex){}System.out.println("Fim.");}}
thingol, valeu era isso mesmo que eu estava precisando, só encontrei um problema que eu não consegui resolver, vamos supor que a Thread va atualizando um componente Swing tipo um JLabel, isso para informar o usuário o que esta acontecendo com o processo
Threadt1=newThread(){@Overridepublicvoidrun(){for(inti=0;i<100;i++){label.setText("Processando registro "+i);try{Thread.sleep(100);}catch(Exceptionrr){}}}};
Quando eu chamo essa Thread com “join” do Action de um Botao ele não atualiza o JLabel e só vai imprimir o último registro processado no caso o 99. Se eu não colocar o join ai sim ele vai exibindo todos os registros um a um o que exibe que esse proceso está realmente fazendo alguma coisa.
Alguem sabe como eu posso usar o Join junto com Telas em Swing para que o processo informe o que está acontecendo e para que a Thread que chamou o processo só continue depois que o proceso terminar