Lista estatica (accesada por hilos)
Estimados, mucho gusto.
Quisiera que me ayudaran con el siguiente problema. He implementado un Thread Pool, en donde con submit() obtengo los future de cada hilo a ejecutar. Como no tengo control sobre la BlockingQueue del Pool, para conocer qué hilo en particular está corriendo, o cuál está colgado por alguna razón, o eliminar o "matar" un hilo en un determinado momento, se me ocurrió que puedo tener una Lista estatica en donde vaya guardando los futures.
La idea es que desde una clase "Control" pueda accesar la lista, y hacer consultas sobre ella, recorrerla, etc..
Es factible esto? como lo puedo hacer con inyeccion de dependencias? les parece correcta la idea o tienen alguna mejor??
Muchas gracias desde ya.
- Inicie sesión o regístrese para enviar comentarios
Re: inyección de dependencias
¿Inyección de dependencias? ¿Quieres usar Primavera? ¡Paf!, quiero decir: ¡Spring! Échale un vistazo a §28.2.2 de la Spring Framework Reference Documentation.
~~~
jconsole
No es más fácil usar jconsole para ver el estado de los hilos?
Por cierto creo que estás confundiendo hilos con tareas. Las tareas que avientas al threadpool corren en los hilos que maneja el threadpool. Mientras haya tareas en la cola del threadpool, sus hilos estarán ocupados, pues en cuanto terminen de ejecutar una tarea, tomarán otra de la cola para ejecutarla.
Un threadpool tiene algunos métodos para poder ver su estado interno: cuántos hilos tiene, cuántos están activos, cuántas tareas hay encoladas. Pero para saber si un hilo está colgado por alguna razón, ahí sí tienes que obtener el hilo y el threadpool no expone sus hilos.
Lo que puedes hacer para conocer los hilos que tiene un threadpool, es que al crearlo le pases una ThreadFactory que tú hayas creado, de modo que los hilos que genera esa fábrica, los guarda en memoria para que tengas esas referencias que indicas. Pero tienes que considerar que el threadpool no le avisa a la fábrica cuando deja de usar un hilo. Un threadpool puede desechar un hilo porque ocurrió una excepción durante la ejecución de una tarea, o porque pasó cierto tiempo en que el hilo estuvo inactivo, dependiendo la configuración del threadpool.
ezamudio.....
ezamudio....como dices tal vez estoy (o estaba confundido) o no me expliqué bien..
Entiendo lo que dices y la diferencia entre las tareas y los hijos que las ejecutan...ahora bien, a modo de ejemplo esta es mi situación:
-ThreadPool crea 10 hilos que irán ejecutando las tareas que vayan llegando. Las demás tareas serán encoladas
-Hilo1 ejecuta Tarea1
-Hilo2 ejecuta Tarea2
-Hilo3 ejecuta Tarea4
-Hilo4 ejecuta Tarea3 (luego de esperar a que temine Tarea1 y Tarea2) (Esta espera a más de una Tarea lo solucioné con ayuda de uds usando Futures como indico aquí: http://www.javamexico.org/foros/java_enterprise/ayuda_con_threadpool)
.....
Entonces el ThreadPool está trabajando ejecutando las Tareas que correspondan...y lo que necesito saber es cómo conocer en un determinado momento (desde otra clase o parte del programa), qué Tareas se están ejecutando, cuáles terminaron con error o fueron canceladas..cancelar alguna(as)..etc...este tipo de cosas necesito controlar..
Saludos.
futures
Suena como que lo que te interesa es saber el estado de las tareas, y pues si ya tienes los futures... simplemente ves si ya uno está terminado o no, tienen métodos para preguntar si ya terminaron, y tienen una variante de get() que le pones un timeout, para no quedarte esperando indefinidamente.