Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/04/2007, 04:34
GreenEyed
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Servicio Web y Thread(Hilos)

Si vas a lanzar varios Thread, quiza en vez de usar un join() para bloquearte, puedes usar las primitivas wait() y notify() para ir notificando al Thread principal a medida que los otros van terminando. Así no tienes que hacer un join() para cada uno de los Threads que lances.

Un ejemplo típico que yo he usado es crear una "cola" de trabajos y llenarla con las tareas a realizar, lanzar n Threads que van leyendo de la cola y vaciandola y cuando acaban su parte hacen un notifyAll(). El proceso principal hace un bucle esperando a que la cola se vacíe y si no está vacía hace un wait(), del que despierta cuando alguien hace un notifyAll. Tambien sirve si no es conveniente lanzar un thread por tarea, por que hay muchas, y asi puedes hacer que un Thread haga varias si al acabar todavia quedan pendientes en la cola.

Se puede hacer el wait() esperando que se vacie una cola de tareas... o esperando a que se llene una cola de "resultados", dependiendo de si necesitas que te devuelvan algo o no.

Se puede refinar con timeouts para que los procesos no se queden colgados esperando eternamente etc. pero la idea básica es esa.

En Java 5 creo que hay ya estructuras echas que te permiten tener colas sincronizadas etc. (paquete java.util.concurrent ), pero todavia no he podido experimentar bien con ellas. Segun el JDK que uses, quiza te ahorren un buen trabajo, aunque la base es esa.

S!