[RESOLVIDO] Threads , Saber quando threads finalizam

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