Articulo de referencia

Suspensión vigilada

En programación concurrente , la suspensión protegida [ 1 ] es un patrón de diseño de software para gestionar operaciones que requieren la adquisición de un bloqueo y el cumplim...

En programación concurrente , la suspensión protegida [ 1 ] es un patrón de diseño de software para gestionar operaciones que requieren la adquisición de un bloqueo y el cumplimiento de una precondición antes de su ejecución. Este patrón se aplica típicamente a las llamadas a métodos en programas orientados a objetos e implica la suspensión de la llamada al método y del hilo que la realiza hasta que se cumpla la precondición (que actúa como una protección ).

Uso

Debido a que es bloqueante , el patrón de suspensión protegida generalmente solo se usa cuando el desarrollador sabe que una llamada a un método se suspenderá durante un período de tiempo finito y razonable. Si una llamada a un método se suspende durante demasiado tiempo, el programa en general se ralentizará o se detendrá, esperando a que se cumpla la precondición. Si el desarrollador sabe que la suspensión de la llamada al método será indefinida o durante un período inaceptablemente largo, entonces puede ser preferible el patrón de bloqueo .

Implementación

En Java, la clase Object proporciona los métodos wait()y notify()para facilitar la suspensión protegida. En la implementación que se muestra a continuación, originalmente encontrada en Kuchana (2004) , si no se cumple ninguna condición previa para que la llamada al método sea exitosa, este esperará hasta que finalmente alcance un estado válido.

public class Example { synchronized void guardedMethod () { while ( ! preCondition ()) { try { // Continuar esperando wait (); // … } catch ( InterruptedException e ) { // … } } // Implementación real de la tarea } synchronized void alterObjectStateMethod () { // Cambiar el estado del objeto // … // Informar a los hilos en espera notify (); } }

Un ejemplo de implementación real sería un objeto cola con un getmétodo que incluye una comprobación para detectar cuándo no hay elementos en la cola. Una vez que el putmétodo notifica a los demás métodos (por ejemplo, a otro getmétodo), getpuede salir de su estado de comprobación y continuar con la llamada. Cuando la cola esté vacía, el getmétodo volverá a entrar en un estado de comprobación.

Véase también

Notas

  1. Lea, Doug (2000). Programación concurrente en Java, segunda edición . Reading, MA: Addison-Wesley. ISBN 0-201-31009-0.

Referencias

  • Kuchana, Partha (2004). "Patrones de diseño de arquitectura de software en Java" (Documento). Boca Raton, Florida: Auerbach Publications..