Foros del Web » Programación para mayores de 30 ;) » Java »

conjunto de hilos problema

Estas en el tema de conjunto de hilos problema en el foro de Java en Foros del Web. hola, tengo un problemita estoy ejecutando en un while una cantidad n de threads. lo que diferencia un thread de otro, son valores en los ...
  #1 (permalink)  
Antiguo 17/09/2008, 13:45
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
conjunto de hilos problema

hola, tengo un problemita

estoy ejecutando en un while una cantidad n de threads. lo que diferencia un thread de otro, son valores en los constructores.
osea, vendria a tener algo asi:

Código:
i=0;
while(condicion)
{
String p = pL.get(i);
ClaseThreadx pe = new ClaseThreadx(p);
pe.start();
i++;
}
pL.get es una lista que contiene valores y los va sacando.
OK, Mi problema es el siguiente.
cuando termina de ejecutar todos los threads, abajo, necesito quedarme a esperar hasta que todos los threads terminen. Y cuando terminen, hago otra cosa.
El tema es que no se como hacerlo.

Para saber cuando un thread termina, yo venia usando el metodo isAlive, donde devuelve "false" si termino. pero mi problema es, como hacer para detectar cuando TODOS terminan ? la variable que instancia la clase es una para todos (y vector de instancias de clases no creo que se pueda, o si se puede no lo se hacer).
Entonces, como puedo saber cuando todos terminan ? osea, cuando cada thread devuelve isAlive false, osea, como detectar cada thread..
si usaria variables diferentes para instanciar la clase del thread es facil, pero uso 1 sola.
ese while corre n threads donde n es siempre diferente, no tengo un numero fijo.

entonces.... alguien sabe?

pd: ademas de esos threads tengo otros corriendo, asi que un metodo o algo para saber cuando TODO (absolutamente TODO) termina, no me sirve..
  #2 (permalink)  
Antiguo 17/09/2008, 23:50
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: conjunto de hilos problema

Hola,

Revisa el tutorial de Java acerca de sincronizar.
Especificamente wait, notify, etc.

http://www.chuidiang.com/java/hilos/wait_y_notify.php

Saludos.
  #3 (permalink)  
Antiguo 18/09/2008, 00:51
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: conjunto de hilos problema

Lo normal es tener en algun sitio un contador, o un Vector, con los Threads que has lanzado. Y cuando un Thread acaba, notifica ese sitio para que reste uno o lo borrer del Vector. Cuando todos los Threads se han parado, el programa puede continuar.

Para parar el programa hasta entonces, notificarlo de que ha habido cambios en los Threads etc., pues lo que dijo HankmanC .

Tambien puedes intentar usar el nuevo paquete java.util.concurrent donde hay clases como el ExecutorService que hacen cosas como las que pides.

http://www.deitel.com/articles/java_...ial_Part4.html

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 18/09/2008, 09:12
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: conjunto de hilos problema

Pero yo no quiero hacer ningun wait, quiero saber si el thread termino, y eso es con isAlive.
No quiero hacer mas nada.

Mi problema es como detectar que todos han terminado, porque no los tengo con nombres diferentes y no se como se hacen con vector las instancias....
  #5 (permalink)  
Antiguo 18/09/2008, 10:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: conjunto de hilos problema

Cita:
Iniciado por razer Ver Mensaje
Pero yo no quiero hacer ningun wait, quiero saber si el thread termino, y eso es con isAlive.
No quiero hacer mas nada.
Si haces eso tu programa estará en un bucle continuo consumiendo CPU y llamando al isAlive de cada Thread hasta que terminen. Es desperdiciar recursos y sobrecargar la maquina para nada.
Pero por poder hacerlo...

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 18/09/2008, 12:32
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: conjunto de hilos problema

Hola,

Aunque parece que estas empeñado en hacerlo a tu manera, voy a indicarte algunos puntos más que te puedan ser útiles.

Para saber si ya termino un Thread no se usa isAlive, en casi todos los manuales te van a decir que es una práctica no recomendada por muchos motivos. Lo que haces es comunicarlos a traves de un Thread principal.

"Es decir, en el lugar de que el Thread principal le pregunte a cada Thread si ya terminó, cada Thread le avisa al principal que ya terminó, guardando en cada Thread una referencia al Thread que funciona como principal."

Pero para hacer eso necesitas saber como funciona wait y notify.

Saludos.
  #7 (permalink)  
Antiguo 18/09/2008, 14:36
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: conjunto de hilos problema

OK, no sabia. Lo voy a tener en cuenta, gracias :). De todas maneras implemente lo que implemente, mi gran problema sigue siendo el mismo: como detectar cada thread !! (quiero saber eso, nada mas :D)

En el while ese que puse, crea instancias a la clase que usa threads con constructores diferentes (variables diferentes), pero todos los nombres de las INSTANCIAS son iguales (pe). Como hago para identificar cada thread !! si todos los nombres son iguales....

Se puede hacer un array ? hay alguna solucion ? es mi problema principal ese.

Osea, si quiero hacer debajo el isAlive (pongo un ejemplo nomas, ya se que el otro es mejor), pe.isAlive() cual me identifica ? el ultimo thread que inicio ? Como identifico cada thread !! :(
(any example?)

probe asi pero no funciona:

ClaseThreadx pe [];
pe = new ClaseThreadx[10]
//eso anda, pero ahora ? c/u tiene constructores con vars diferentes (ahi en ningun momento le indico los constructores).... como le digo eso, como los empiezo, etc? :S

pe[0].isAlive(); //ejemplo (algo asi quiero hacer)

asdasd.... no tengo idea como hacerlo :X prque tengo vars diferentes en los constructores
como seria la sintaxis correcta?

salu2


pd: hice esto y parece que funciona. ClaseThreadx[] pe = new ClaseThreadx[10];
y debajo pe[0] = new ClaseThreadx(variable_constructor);
pe[0].start

y asi....
no creo q haya ningun problema con esto verdad?
salu2

Última edición por razer; 18/09/2008 a las 17:13
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:55.