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

Detener metodo bloqueante

Estas en el tema de Detener metodo bloqueante en el foro de Java en Foros del Web. Hola! Tengo una duda. Os explico... tengo un método relacionado con el envio de datos a través de puerto serie, este método es bloqueante si ...
  #1 (permalink)  
Antiguo 14/07/2010, 00:59
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Detener metodo bloqueante

Hola!

Tengo una duda. Os explico... tengo un método relacionado con el envio de datos a través de puerto serie, este método es bloqueante si no hay un puerto serie conectado. Así que tengo una función que a veces al invocarse me cuelga la aplicación.

Quiero evitar esto ¿Cómo puedo hacerlo exactamente? Lo que a mi se me había ocurrido es hacer algo del estilo: crear dos hilos de ejecución y en uno de ellos tener un timeout, cuando este acabe cancelar el otro hilo si sigue en ejecución. Pero nunca he trabajado con Threads en Java, por lo que ando un poco perdido.

¿Alguna ayuda? Gracias
  #2 (permalink)  
Antiguo 14/07/2010, 01:12
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Detener metodo bloqueante

Wenas

No entiendo lo de bloqueante. Por que es bloqueante??

No te bastaria con llamar al metodo y si no tienes puerto serie lanzar una excepcion y salir del programa?? Para que tanto lio??

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #3 (permalink)  
Antiguo 14/07/2010, 01:21
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Detener metodo bloqueante

Hola

Estoy trabajando sobre un código que me han pasado y si te digo la verdad, realmente no se porque es bloqueante, pero lo es...

El metodo que me bloquea es un write de la clase OutputStream... no lanza ningún tipo de excepcion ni nada por el estilo, simplemente, me bloquea al llamarlo.

Y con todo el código elaborado que hay entorno a ello... creo que es mejor hacer una "chapucilla" de este estilo que cambiar todo.

Alberto.
  #4 (permalink)  
Antiguo 14/07/2010, 01:26
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Detener metodo bloqueante

No deberia lanzarte una IOException?

Pon el codigo.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #5 (permalink)  
Antiguo 14/07/2010, 04:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Detener metodo bloqueante

Hay streams que se bloquean, como por ejemplo el InpuStream/OutputStream de un proceso lanzado con Runtime.exec donde si lees cuando toca escribir o viceversa entonces la cosa se queda bloqueada. En estos casos se usan Threads separados para que nadie se quede bloqueado esperando.

En tu caso, el problema parece ser que la llamada al stream se queda bloqueada sí o sí cuando no hay nada conectado, y en estos casos normalmente:
.- Hay un método de comprobación de si te vas a quedar bloqueado o no para llamarlo antes y no quedarte bloqueado
.- Hay una versión del método al que le pasas un timeout para que salte una excepción si no ha respondido al cabo de X tiempo.
.- Toca crearse un thread que haga de Timeout y cuando le salte el tiempo hacer un close del stream para que salte una IOException y se desbloquee el proceso esperando del stream.

Hay que mirar la clase con la que se puede llamar al método y ver el API para averiguar cuales opciones hay disponibles. Por ejemplo, aunque lo que tengas sea un OutputStream, eso es una interfaz y hay que mirar cual es la clase que realmente hay por debajo para ver si tiene alguna opción más aparte de las genéricas de OutputStream.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: detener, metodo
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 04:04.