Multithreading - Controle de quantidade de threads filhas

4 respostas
B

Olá a todos!

Estou utilizando Multithreading na minha aplicação (uma thread mãe criando threads filhas).
Estou querendo limitar a quantidade de threads filhas que podem ser criadas… No máximo 100, por exemplo…
As thread filhas possuem um time-out de auto-destruição… Gostaria que a thread mãe ficasse sabendo quando a thread filha deixou de existir e assim atualizasse um contador…
Qual seria a melhor forma de fazer isso?

[]s

4 Respostas

M

Nos não temos controle do GC no java, então eu acho que não teria como saber se a thread filha deixou de existir.

Existe algumas linguagens que possuem um método destruidor, mas parece que java não.

Oque você pode fazer é criar um metodo ‘Finalizar’ na sua thread filha e nele dar um stop na thread e atualizar o contador.

ViniGodoy

Use um FixedThreadPool:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)


http://www.deitel.com/articles/java_tutorials/20051126/JavaMultithreading_Tutorial_Part4.html

ViniGodoy

magostta:
Nos não temos controle do GC no java, então eu acho que não teria como saber se a thread filha deixou de existir.
Existe algumas linguagens que possuem um método destruidor, mas parece que java não.
Oque você pode fazer é criar um metodo ‘Finalizar’ na sua thread filha e nele dar um stop na thread e atualizar o contador.

Threads não são objetos, por isso, não possuem destrutores.

Para fazer isso, o ideal seria implementar um Decorator para os Runnables, de modo que esse decorador disparasse um evento assim que o runnable iniciasse e assim que terminasse. É mais ou menos assim que o threadPool trabalha, com a vantagem de que ele ainda reaproveitar threads vivas, otimizando o tempo de criação e destruição de threads, e criando mecanismos de controles que limitam sua existência.

E

Evite pensar em “threads” e comece a pensar em “jobs”.
O java.util.concurrent dá pleno suporte ao conceito de “jobs” - ou seja, algo que deve ser efetuado em paralelo (o detalhe de que é feito por uma thread é mais ou menos abstraído).
É a mesma diferença entre o “goto” e o “while”.

Criado 11 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 4
Participantes 4