Olá,
estou com uma duvida, preciso saber quando todas as threads que lanço chegam ao seu fim.
public void enviaMensagem() throws Exception {
int ntarefas = this.destino.length;
int nthreads = 5;
int aux = 0;
ntarefas = ( (ntarefas/nthreads) + (ntarefas%nthreads) );
while( nthreads > 0 ){
String[] saida = java.util.Arrays.copyOfRange(this.destino, aux, (ntarefas+aux));
TrataTexto tt = new TrataTexto (saida,Integer.toString(nthreads));
tt.start();
aux += ntarefas;
nthreads--;
}
}
a thread tt ai é composta assim TrataTexto (String[] saida,String name).
o que quero realmente é emitir uma saida se todas e somente se todas as threads aí lançadas cheguem ao seu fim.
Sou novo no GUJ e se o topico estiver no lugar errado por favor movam.
[]'s
Quem dispara essas threads pode dar um join() em todas elas. Esse join() fará o Java esperar até que a thread tenha terminado.
[code]public void enviaMensagem() throws Exception {
int ntarefas = this.destino.length;
int nthreads = 5;
int aux = 0;
ntarefas = ( (ntarefas/nthreads) + (ntarefas%nthreads) );
TrataTexto tts[] = new TrataText[nThreads];
for (int i = 0; i < nThreads; i++) {
String[] saida = java.util.Arrays.copyOfRange(this.destino, aux, (ntarefas+aux));
TrataTexto tt = new TrataTexto (saida,Integer.toString(nthreads));
tt.start();
tts[i] = tt;
aux += ntarefas;
}
//Espera as threads terminarem
for (TrataText tt : tts) {
tt.join();
}
exibirResultados();
}[/code]
Será que isso ajuda?
List threadsFinalizadas = new ArrayList();
public void enviaMensagem() throws Exception {
int ntarefas = this.destino.length;
int nthreads = 5;
int aux = 0;
ntarefas = ( (ntarefas/nthreads) + (ntarefas%nthreads) );
while( threadsFinalizadas.size() != nthreads){
String[] saida = java.util.Arrays.copyOfRange(this.destino, aux, (ntarefas+aux));
TrataTexto tt = new TrataTexto (threadsFinalizadas, saida,Integer.toString(nthreads));
tt.start();
aux += ntarefas;
nthreads--;
}
}
TrataTexto adiciona um item na lista, na última linha do método run()
Talvez também ThreadGroup.activeCount() possa ajudar, mas no javadoc cita a palavra “estimativa”.
ViniGodoy ,
Obrigado, Funcionou não como queria mas já sei o que fazer.Só vou precisar dar um repaint num JProgresBar.
CarvalR2,
Obrigado ,também.
Só pra constar, a comparação do while iria terminar-lo no meio do caminho.Iria criar também menos threads.
Ficariam coisas a fazer.
Soluçoes simples que eu nem imaginava. :lol:
Obs. Voces 7 segundos de diferença nas respostas de vocês aqui. :shock:
[]'s