Threads

10 respostas
L

Pessoal, sou iniciante em java e estou com uma dificuldade com threads, tenho a impressao que é bem simples de resolver porém com o que li sobre o assunto nao consegui. Tenho o seguinte:



Thread p = new MinhaTread();

p.start();

new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa));


O que quero é que a segunda Thread só comece após a Thread p morrer. Tem jeito?? Agradeço desde ja.

10 Respostas

V

Ola…

utilize… p.join();

L
Pelo que tinha lido achei que era com o join, até tentei usar mas nao funcionou... voce pode ser mais especifico? Obrigado.

vdb:
Ola…

utilize… p.join();

V

Faca assim:

Thread p = new MinhaTread(); 
p.start(); 
try {
  p.join();
} catch (InterruptedException e) { }

new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa)).start();

“NumLetras” esta implementando Runnable ?
“MinhaThread” esta extendendo Thread ?

Se nao funcionar poste o erro.

ViniGodoy

ahemm… se vc vai fazer algo assim… pq simplesmente não usa uma única thread?

L

deu erro… eu vou melhorar o meu problema e talvez tenha uma solução mais eficiente. Tenho isso:

new Thread(new NumLetras(JOptionPane.showInputDialog("Digite a palavra"), this.txtpa,this.lblpa)).start();
   new Thread(new PreencheBarra(this.txt1, this.barra)).start();
   new Thread(new PreencheBarra(this.txt2, this.barra1)).start();
   new Thread(new PreencheBarra(this.txt3, this.barra2)).start();
   new Thread(new PreencheBarra(this.txt4, this.barra3)).start();

O que acontence é que enquanto eu nao entro com a palavra as outras Threads nao iniciam até ai normal, mas o que preciso é que de algum jeito as outras Threads iniciem e aquela Thread aguarde até que eu entre com a nformação e depois inicie…O que tentei fazer antes foi outra Thread pedindo a palavra, inicialmente até funcionou porem a Thread que precisa da palavra inicia sem a palavra e da erro… a ideia de esperar aquela Thread terminar era pra isso.

vdb:
Faca assim:

Thread p = new MinhaTread(); 
p.start(); 
try {
  p.join();
} catch (InterruptedException e) { }

new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa)).start();

“NumLetras” esta implementando Runnable ?
“MinhaThread” esta extendendo Thread ?

Se nao funcionar poste o erro.

ViniGodoy

A maneira mais fácil de resolver esse problema é atrás da classe Future e do ExecutionService. Tem um exemplo disso aqui:
http://www.guj.com.br/posts/list/50321.java#264645

Foi feito com Future, mas você pode usar Runnable, se suas threads não retornarem resultado.

V

Tente colocar o JOptionPane.showInputDialog fora da chamada da thread

String opcao = JOptionPane.showInputDialog("Digite a palavra");

new Thread(new NumLetras(opcao, this.txtpa,this.lblpa)).start(); 
new Thread(new PreencheBarra(this.txt1, this.barra)).start(); 
new Thread(new PreencheBarra(this.txt2, this.barra1)).start(); 
new Thread(new PreencheBarra(this.txt3, this.barra2)).start(); 
new Thread(new PreencheBarra(this.txt4, this.barra3)).start();
L

Colocando o JOptionPane antes da chamada fico na mesma, estou pesquisando sincronismo pra ver se consigo resolver com o join trava tudo.

vdb:
Tente colocar o JOptionPane.showInputDialog fora da chamada da thread

String opcao = JOptionPane.showInputDialog("Digite a palavra");

new Thread(new NumLetras(opcao, this.txtpa,this.lblpa)).start(); 
new Thread(new PreencheBarra(this.txt1, this.barra)).start(); 
new Thread(new PreencheBarra(this.txt2, this.barra1)).start(); 
new Thread(new PreencheBarra(this.txt3, this.barra2)).start(); 
new Thread(new PreencheBarra(this.txt4, this.barra3)).start();

ViniGodoy

Você viu o link que eu coloquei ali em cima?!?

L

Vi rapidamente, agora no trabalho nao terei tempo de testar vou fazer em casa logo a noite qualquer coisa posto aqui novamente.

Criado 1 de junho de 2008
Ultima resposta 2 de jun. de 2008
Respostas 10
Participantes 3