Java - lanzar exception desde un thread hijo

 
Vista:

lanzar exception desde un thread hijo

Publicado por Carlos (2 intervenciones) el 20/12/2007 16:38:47
Saludos.

Alguien sabe o tiene referencias de como lanzar una exception que ocurre en un thread hijo hacia su thread padre(main thread) para que este ultimo la procese?

Gracias por sus comentarios.

Carlos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:lanzar exception desde un thread hijo

Publicado por putahostia (69 intervenciones) el 20/12/2007 18:55:06
M-m-m ... no es el objetivo de Thread. Es como querer procesar los RuntimeErrors. Si se produce una excepción en el método run del hilo, o lo tratas dentro o ... capturas una excepción generica fuera, en el padre, y tira pa'lante. Y pensándolo mejor, no querrás usar la excepción para controlar el hilo ¿verdad? Porque esto es mala idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lanzar exception desde un thread hijo

Publicado por carlos (2 intervenciones) el 20/12/2007 19:00:25
Lo que pretendo es que cuando ocurra algo en el hilo secundario, el hilo principal se entere y pueda mandar un mensaje con la excepcion que ocurrio. Lo que sucede ahora es que si ocurre algo en el hilo hijo, el padre no se entera y se queda colgado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:lanzar exception desde un thread hijo

Publicado por putahostia (69 intervenciones) el 21/12/2007 08:15:52
De antemano - no voy muy suelto en tema de Threads, así que a lo mejor digo alguna burrada.

Los hilos son como procesos independientes y es algo complicado comunicarlos. Lo que se me ocurre es mandar una referencia al hijo del padre en el momento de crearlo, así el hijo sabe quien es el padre y le notig¡fica la excepción.

Algo asi:

public class Hilo extends Thread {

public void run() {
System.out.println("Inicio hilo padre.");
HiloHijo hijo = new HiloHijo(this);
System.out.println("Llamando hijo.");
try {
hijo.start();
}
catch (Exception e) {
System.out.println("El error del hijo.");
e.printStackTrace();
}
try {
Thread.currentThread().sleep(2000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Fin hilo padre.");
}

public void errorHijo(Throwable t) {
System.out.println("El error del hijo en el padre: ");
t.printStackTrace();
}

public static void main(String[] args) {
System.out.println("INICIO.");
Hilo padre = new Hilo();
padre.start();
System.out.println("FIN.");
}
}

class HiloHijo extends Thread {

Thread padre;

HiloHijo(Thread padre) {
this.padre = padre;
}

public void run() {
System.out.println("Inicio hilo hijo.");
System.out.println("Provocando excepcion ...");

try {
Thread.currentThread().sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
try {
int a = 1;
int b = 0;
int c = a / b;
}
catch (Exception e) {
System.out.println("Error en hijo: ");
e.printStackTrace();
((Hilo) padre).errorHijo(e);
}

try {
Thread.currentThread().sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Fin hilo hijo.");
}
}

De todas formas, a mi el hilo padre no se me cuelga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar