Teniendo en cuenta el hecho de que espere() sólo puede ser llamado en un contexto sincronizado que posteriormente liberar el monitor hasta un notify/nofityAll ha sido llamada en el mismo objeto por otro hilo,¿Qué sucede cuando un hilo se interrumpe mientras se bloquea en una espera()?
Supongamos Tema A se bloquea en una espera() que da como resultado que el hilo B adquiere el bloqueo. Ahora si interrumpimos el hilo A, ¿el control se transferirá inmediatamente al hilo A? en cuyo caso, dado que el bloque try catch que maneja la InterrupException está dentro del contexto sincronizado, y dado que solo un Thread puede contener el monitor a la vez, ¿qué sucederá con el Thread B? ¿debería pasar a un estado bloqueado hasta que el hilo A haya terminado la ejecución?
Gracias de antemano
+1. Busqué en el documento para wait() (sin argumento), y no fue mencionado (y no había ningún enlace al método de espera sobrecargado). Demasiado. –
¡ah! No veo la explicación en el documento 6 de java http://bit.ly/tNJ1VT. de todos modos, en ese caso, supongo que el Hilo A DEBE volver a verificar el predicado de condición al recibir la Excepción antes de continuar –
@arun_suresh: Como dije, está en la espera (larga) javadoc: http://download.oracle.com/javase /6/docs/api/java/lang/Object.html#wait%28long%29. Normalmente se usa una interrupción para detener un hilo. Entonces, por lo general, no sigues adelante. –