Como fazer para uma Thread parar a execução da outra?
7 respostas
A
amhfilhoPJ
Estou tentando rodar duas threads concorrentes, sendo que a thread A sempre termina de realizar a operação antes que a thead B. Como fazer com que esta também termine a execução da thread B ?
Aqui vai um exemplo do que estou tentando fazer:
Threada=newThread(newRunnable(){publicvoidrun(){// código que faz um select em uma tabela. Longo tempo //processamento}});Threadb=newThread(newRunnable(){publicvoidrun(){// chama um JDialog que exibe "em processamento, aguarde"}});a.start();b.start();
Quando acabar thread a, fechar o JDialog de thread b
Thread a = new Thread(new Runnable() {
public void run() {
// chama um JDialog que exibe "em processamento, aguarde"
// código que faz um select em uma tabela. Longo tempo
//processamento
//fecha a JDialog
}
});
a.start();
A
amhfilhoPJ
Na verdade não. O JDialog deve rodar simultaneamente com o select, que é feito no Frame que fica abaixo. Na verdade o JDialog vai substituir o cursor de ampulheta, entendeu?
Valeu,
B
barradas
Cara eu estou com a mesma duvida ! Você conseguiu arrumar ?
Preciso que uma thread faça consulta no banco e enquanto essa thead faz a consulta outra thread toca uma musica ! Só que quando a consulta retornar a thread tem que parar de tocar musica !
alguem tem alguma ideia ?
rmendes08
Cara, dá uma olhada em Swing Worker Thread. Ela simplifica bastante a tarefa que você quer fazer:
Valeu cara mas eu to usando JSF será que tem algum problema ?
rmendes08
barradas
Bom, eu não entendo muita coisa de JSF, mas é fato que você não vai conseguir fazer isso do lado servidor. Você tem que tratar isso com Javascript. Você faz uma requisição para o server. Trava a tela e toca a música. Daí, no callback do serviço você destrava a tela e para a música. Agora, não sei se tem componente pronto no JSF pra fazer isso.
armeniocardoso
Dois threads podem ser “sincronizados” através de um artifício bem simples: um thread cria um arquivo (mesmo vazio) indicando que está processando - quando termina ele apaga o arquivo. O outro thread testa se o arquivo existe e processa enquanto a resposta for verdadeira.
Esse artifício é usado por vários servidores para sincronizar processos diferentes.
Segue um exemplo:
No processo a ser assistido:
publicvoidrun(){Filefile=newFile("processando.txt");file.createNewFile();//aqui entra o processofile.delete();}
No processo assistente:
publicvoidrun(){Filefile=newFile("processando.txt");while(file.exists()){//processo aguardando...toca música...mostra uma tela...etc.}}