Como fazer para uma Thread parar a execução da outra?

7 respostas
A

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:

Thread a = new Thread(new Runnable() {
    public void run() {
        // código que faz um select em uma tabela. Longo tempo 
        //processamento
    }

});

Thread b = new Thread(new Runnable() {
    public void run() {
        // chama um JDialog que exibe "em processamento, aguarde"
        
    }

});

a.start();
b.start();

Quando acabar thread a, fechar o JDialog de thread b

7 Respostas

J

A ideia não seria esssa?

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

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

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:

http://download.oracle.com/javase/tutorial/uiswing/concurrency/simple.html

B

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:

public void run() {

   File file = new File("processando.txt");
   file.createNewFile();
  
   //aqui entra o processo

   file.delete();
}

No processo assistente:

public void run() {

   File file = new File("processando.txt");
   while(file.exists()) {

      //processo aguardando...toca música...mostra uma tela...etc.

   }
}

Bom, essa é a idéia básica.

Criado 26 de maio de 2006
Ultima resposta 29 de ago. de 2011
Respostas 7
Participantes 5