2011-08-28 13 views
9

Actualmente estoy pensando en cómo diseñar un sistema de subprocesamiento múltiple en Java que necesita realizar un gran procesamiento de red y almacenamiento de base de datos. El programa lanzará tres hilos básicos al principio. A lo largo de estos hilos básicos, me gustaría lanzar otros hilos no del programa principal, sino de dos de los hilos. ¿Es posible que un hilo para lanzar otro hilo que conduce a una especie de jerarquía como:¿Hilos dentro de hilos en Java?

> Parent ->t0 thread1 -> t1 tread1.1 
>  ->t0 thread2 
>  ->t0 thread3 -> t2 thread3.1 

t0= inital time 
t1,t2 = time at a point in the running thread 
t1 != t2 

Si alguien no pudo proporcionar una solución teórica con referencias?

+1

Erm, sí. ¿Por qué no podrías? Tal vez si lo intentaste ... –

+0

No estoy seguro de lo que estás preguntando. Puede crear un nuevo hilo a partir de cualquier código java, independientemente del hilo en el que se esté ejecutando. ¿Los hilos deben mantener referencias a los otros hilos que generan? ¿Cuál es el propósito de la jerarquía que describes? – Russell

Respuesta

8

Sí, puede iniciar tantos hilos como desee, pero probablemente no sea la mejor manera de hacerlo. Es mucho mejor usar las API sin bloqueo para que pueda iniciar la ejecución de alguna llamada externa y el hilo que llama puede comenzar inmediatamente a hacer otra cosa sin esperar a que vuelva la llamada de socket/base de datos. Luego, cuando vuelve la llamada de socket/base de datos, se activa una devolución de llamada para finalizar ese procesamiento.

La E/S no bloqueante puede proporcionar una utilización de CPU superior ya que solo está activando llamadas y registrando devoluciones de llamadas sin tener que intentar equilibrar el número "correcto" de subprocesos simultáneos que en su mayoría duermen de todos modos.

http://www.owlmountain.com/tutorials/NonBlockingIo.htm

http://www.tensegrity.hellblazer.com/2008/03/non-blocking-jdbc-non-blocking-servlet-apis-and-other-high-mysteries.html

+0

¿Sabe por casualidad cómo puedo hacer que mi hilo continúe ejecutándose sin importar las excepciones? Las excepciones parecen detener los hilos (eso es cathing). Traté de resolverlo creando un hilo dentro de un hilo, pero la excepción en el hilo B (creado desde el interior del hilo A) detiene ambos hilos. Los indicadores booleanos para ambos siguen siendo verdaderos después de que se hayan detenido. – Lealo

2

Si un hilo puede lanzar otro hilo, y ese hilo puede lanzar hilo (s) y sigue y sigue ...

En el método de un hilo run() - se puede crear e iniciar otros hilos.

3

Para responder a la pregunta, sí hilos pueden lanzar otros hilos.

¿Es importante la jerarquía?

Probablemente sea mejor que use un ExecutorService con un grupo de subprocesos en caché. De esta forma, puede juntar hilos en lugar de crear lotes (lo cual es costoso). Los servicios Executor también proporcionan otras cosas interesantes, y el uso de Callables/Runnables con ellos es probablemente mucho más fácil de probar que el de enrutarlo solo con hilos.

0

Es posible para exemple usted puede creat hilo y poner id en conjunto como este

UnThread[] tab= new UnThread[10] ; 

for (int i=0;i<20;i++) 

tab[i] = new UnThread(); 

Después se puede dar a la subMainThread la pestaña gama

exemple

while(tab[1].isAlive()) { 
    //do somthing.. 
    System.out.println("Ligne affichée par le main"); 
    try { 
    // et faire une pause 
    tab[1].sleep(800); 
    } 
    catch (InterruptedException ex) {} 
} 

aquí un uso simple del hilo: http://kamel.berrayah.com/wordpress/2013/07/java-threads/