Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/06/2011, 20:36
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Hilo, ¿parar un hilo desde otro hilo?

Hola,

Cita:
Iniciado por GENESISBM Ver Mensaje
... Pues otra preguntita sencilla, yo tengo 2 hilos, A y B, y quiero que B, pueda parar A, pero no lo consigo de ninguna forma, ...
Técnicamente no es posible, por lo menos de la forma en que lo estas planteando. Un hilo A no puede detener a otro hilo B solamente llamando a wait() o notify().

Cita:
Iniciado por GENESISBM Ver Mensaje
...
Y si quiero parar otro hilo que es ese, lo que hago es pasarle el hilo al constructor y:
Código:
synchronized(HILO_EN_CUESTION) {
  try {
    wait();
  } catch (InterruptedException e) {
    e.printStackTrace(); 
  }
}
También he probado a ponerle HILO_EN_CUESTION.wait(), pero nada, ...
El método wait() y el método notify() no son parte exclusivamente de la clase Thread, sino que pertenecen a la clase Object. Por lo tanto wait() y notify() no actúan sobre el objeto o thread al cual llamas su método wait(); sino que se aplica al hilo que está corriendo y llama al método wait().

Es decir, si hago Construccion.wait() no detiene el hilo denominado Construccion, sino detiene el hilo que lo llamó, por consiguiente wait() siempre detiene el hilo actual que llamó al método wait().

Cita:
Iniciado por GENESISBM Ver Mensaje
... Haber si me podéis echar una mano, son preguntas sencillitas, por falta de experiencia total, he googleado bastante pero no encuentro nada. ...
Me imagino que lo que deseas es detener un hilo sin trabajo, solo llamar al método wait() y que se detenga y listo. Mientras que posiblemente el hilo está haciendo un trabajo que no se puede interrumpir.

Que un hilo detenga la ejecución de otro hilo es un trabajo bastante complicado puesto que se necesita modificar completamente el código del hilo que se desea detener para que no sucedan deadlocks, livelocks u otros problemas.

Pero eso depende del tipo de aplicación y el hilo que se desea detener, puesto que si es un hilo que está esperando en un socket simplemente no se puede, tienes que pensar tu aplicación de otra forma para que revise cada cierto tiempo que se cumpla alguna condición.

Saludos,

ps:

Posiblemente te sea de mayor información:
http://download.oracle.com/javase/6/...precation.html