Foros del Web » Programación para mayores de 30 ;) » Java »

Hilo, ¿parar un hilo desde otro hilo?

Estas en el tema de Hilo, ¿parar un hilo desde otro hilo? en el foro de Java en Foros del Web. Abro otro hilo, porque son temas distintos, y creo que queda mejor organizado, sino me lo decís y los uno! Pues otra preguntita sencilla, yo ...
  #1 (permalink)  
Antiguo 03/06/2011, 19:32
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Pregunta Hilo, ¿parar un hilo desde otro hilo?

Abro otro hilo, porque son temas distintos, y creo que queda mejor organizado, sino me lo decís y los uno!

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, en cambio notificarles que sigan si que me funciona. Hago lo siguiente:

Si quiero parar el propio hilo (Esto si que funciona):

Código:
				synchronized(this) {
					try {
						wait();
					} catch (InterruptedException e) {
						e.printStackTrace(); 
					}
				}
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, no hay forma, en cambio llamarlos con notifyAll(), sin problemas exactamente de la misma manera...

Haber si me podéis echar una mano, son preguntas sencillitas, por falta de experiencia total, he googleado bastante pero no encuentro nada.

Gracias a todos!
__________________
http://www.isosps3.com/ - Tu web de de PS3, aquí puedes encontrar desde información hasta backups!
  #2 (permalink)  
Antiguo 03/06/2011, 20:36
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 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
  #3 (permalink)  
Antiguo 04/06/2011, 11:04
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Hilo, ¿parar un hilo desde otro hilo?

Estoy esperando en el cine, y se me a ocurrido una posible forma, si yo hago un metodo en cada hilo, para parar el hilo, si yo llamo desde el hilo B a A al metodo este el cual comento tambien me pararia el hilo del cual llamo? O pararia al hilo que contiene el metodo?

Muchas gracias hackman!!!!!
__________________
http://www.isosps3.com/ - Tu web de de PS3, aquí puedes encontrar desde información hasta backups!
  #4 (permalink)  
Antiguo 04/06/2011, 12:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Hilo, ¿parar un hilo desde otro hilo?

Hola,

Cita:
Iniciado por GENESISBM Ver Mensaje
Estoy esperando en el cine, y se me a ocurrido una posible forma, si yo hago un metodo en cada hilo, para parar el hilo, si yo llamo desde el hilo B a A al metodo este el cual comento tambien me pararia el hilo del cual llamo? O pararia al hilo que contiene el metodo?
Si también detendría el hilo del cual se hace la llamada. El problema es el siguiente, un hilo no sabe nada del otro hilo aunque los dos usen un mismo Objeto, por ejemplo:

Código Java:
Ver original
  1. public void myWait() {
  2.   cualquiercosa.wait();
  3. }
Si el hilo A llama a myWait se detiene el hilo A, si el hilo B llama a myWait se detiene el hilo B, así de simple. Eso si, el hilo que llamo a myWait tiene que tener el 'monitor' del objeto (cualquiercosa), normalmente debe estar synchronized.

Saludos,
  #5 (permalink)  
Antiguo 05/06/2011, 05:34
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Hilo, ¿parar un hilo desde otro hilo?

Muchas gracias HackmanC, pues mirare como lo hago, si cambiando una variable true, y le meto un if, que haga o deje de hacer (aunque esto seria menos preciso). Pero creo que modificare un poco el codigo y suprimire un hilo, y lo dejare solo en clases.

Gracias! Ahora me mirare el otro post que hice, que no he tenido tiempo.
__________________
http://www.isosps3.com/ - Tu web de de PS3, aquí puedes encontrar desde información hasta backups!

Etiquetas: hilo, parar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:19.