Pregunta

Mi escenario es el siguiente:

Me estoy poniendo en práctica un servidor que debe tiempo de espera o producir una respuesta dentro del plazo de espera determinado para cada solicitud. Por lo tanto cada solicitud se garantiza una respuesta desde el punto de vista del servidor (la respuesta, por supuesto, podría no llegar al cliente debido a la falta de transporte capa, etc ...).

A fin de aplicar la semántica anteriores, cada solicitud genera un subproceso (en realidad recupera una disponible de una pila de hilo) y espera su respuesta a través de un notificar sobre un objeto de sincronización. El período de espera se limita con un parámetro de tiempo de espera envió a objeto de esperar método. Los delegados subproceso generado la petición a un objeto que realmente sabe cómo manejar la petición. API llamada de este objeto es conocido, pero no hay un acuerdo de nivel de servicio conocido que especificar que una llamada nunca puede fallar indefinidamente. (Específicamente en mi caso, el servidor es en realidad un cliente CORBA -. Pero eso no es el punto)

Ahora, lo que me interesa, es si hay o no hay una manera para mí para detectar alguna manera de que ese hilo no responde y luego mato (interrumpirlo) a pesar de que estoy actualmente bloqueada en una llamada al método?

Por cierto, sé que puedo mantener una referencia al objeto de hilo y después de una cantidad pre-especificado de tiempo llamar a su método de interrupción (). Que, lamentablemente, no asegura "interrumpir" la semántica ...

de Java Tema primitivo Deprecation

Gracias a todos

¿Fue útil?

Solución

Creo que si no se puede confiar en la interrupción () semántica entonces usted puede estar fuera de suerte. No hay manera confiable o segura de interrumpir la fuerza de un hilo. Es peligroso en cualquier idioma.

Me gustaría que de interrupción () podría conseguir lo que necesita, incluso si pudiera ser evitado. Las llamadas CORBA deben estar pasando por las clases de red estándar y por lo tanto debe interrumpir correctamente en cualquier llamadas de bloqueo.

Es lo mejor que puede hacer por debajo de desove procesos secundarios completos.

Otros consejos

Trate de usar un ExecutorService y hacer que la lógica de negocio real se realizó en un rescatable. El futuro devuelto por el ExecutorService tiene un get () que le permite especificar cuánto tiempo va a esperar ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top