Paquete | flash.concurrent |
Clase | public final class Condition |
Herencia | Condition Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.5, AIR 3.5 |
A continuación, mostramos un posible flujo de trabajo para utilizar un objeto Condition:
- Antes de utilizar un objeto Condition, el primer programa de trabajo debe tomar la propiedad del objeto Mutex asociado a la condición mediante una llamada a los métodos
lock()
otryLock()
del objeto Mutex. - El código del programa de trabajo se ejecuta en el recurso compartido hasta que una determinada condición pasa a ser falsa, impidiendo así que el programa de trabajo pueda hacer nada más en el recurso compartido. Por ejemplo, si el recurso compartido es un conjunto de datos para procesar, cuando no hay más datos para procesar, el programa de trabajo no puede hacer nada más.
- En ese momento, llama al método
wait()
del objeto Condition para poner en pausa la ejecución del programa de trabajo y liberar la propiedad del objeto Mutex. - En un determinado momento, un segundo programa de trabajo toma la propiedad del objeto Mutex. Dado que el objeto Mutex está disponible, es seguro que el código de segundo programa de trabajo funcione con normalidad en el recurso compartido. El segundo programa de trabajo hace lo necesario para cumplir la condición, de modo que el primer programa de trabajo pueda volver a funcionar. Por ejemplo, si el primer programa de trabajo no tiene datos para procesar, el segundo programa de trabajo transferirá más datos para procesar en el recurso compartido.
- En ese momento, la condición relacionada con el primer programa de trabajo ahora es true, por lo que el primer programa de trabajo necesita recibir la notificación de que se ha cumplido al condición. Para notificar al primer programa de trabajo, el segundo programa de trabajo llama al método
notify()
onotifyAll()
del objeto Condition. - Además de llamar a
notify()
, el segundo programa de trabajo debe liberar la propiedad del objeto Mutex. Lo hace llamando al métodounlock()
del objeto Mutex o al métodowait()
del objeto Condition. Como el primer programa de trabajo ha llamado al métodowait()
, la propiedad del objeto Mutex vuelve al primer programa de trabajo. La ejecución del código en el segundo programa de trabajo se reanuda con la siguiente línea de código que sigue a la llamada await()
.
La clase Condition es uno de los tipos de objeto especiales que comparten programas de trabajo en vez de copiarlo entre ellos. Cuando se transfiere una condición de un programa de trabajo a otro, bien llamando al método setSharedProperty()
del objeto Worker o utilizando un objeto MessageChannel, los dos programas de trabajo tienen una referencia al mismo objeto Condition en la memoria del motor de ejecución.
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
isSupported : Boolean [estática] [solo lectura]
Indica si la clase Condition se admite en la plataforma actual. | Condition | ||
mutex : Mutex [solo lectura]
La clase Mutex asociada a esta condición. | Condition |
Método | Definido por | ||
---|---|---|---|
Crea una instancia de Condition. | Condition | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Especifica que la condición representada por este objeto Condition se ha cumplido y que la propiedad del objeto Mutex volverá al siguiente programa de trabajo (si existe) que esté esperando el cumplimiento de esta condición. | Condition | ||
Especifica que la condición representada por este objeto Condition se ha cumplido y que la propiedad del objeto Mutex volverá a todos los programas de trabajo que estén esperando el cumplimiento de esta condición. | Condition | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object | ||
Especifica que la condición representada por el objeto Condition no se cumple, y que el programa de trabajo actual debe esperar a que se cumpla para poder ejecutar más código. | Condition |
isSupported | propiedad |
isSupported:Boolean
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.5, AIR 3.5 |
Indica si la clase Condition se admite en la plataforma actual.
Nota: si la clase Mutex no se admite, no será posible crear una instancia de Condition y esta propiedad será false
.
Implementación
public static function get isSupported():Boolean
mutex | propiedad |
Condition | () | Información sobre |
notify | () | método |
public function notify():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.5, AIR 3.5 |
Especifica que la condición representada por este objeto Condition se ha cumplido y que la propiedad del objeto Mutex volverá al siguiente programa de trabajo (si existe) que esté esperando el cumplimiento de esta condición.
Llamar a este método no libera automáticamente la propiedad del objeto Mutex. Después de llamar a notify()
, debe liberar explícitamente la propiedad del objeto Mutex de una de estas dos formas: llamando al método Mutex.unlock()
si el programa de trabajo actual no necesita de nuevo el objeto Mutex, o bien llamar a wait()
si el programa de trabajo deberá obtener la propiedad del objeto Mutex otra vez cuando el resto de programas de trabajo hayan finalizado sus tareas.
Una vez liberado el bloqueo del objeto Mutex, el siguiente programa de trabajo de la cola de programas de trabajo que hayan llamado al método wait()
adquirirá el objeto Mutex y se reanudará la ejecución del código.
Emite
IllegalOperationError — Si el programa de trabajo actual es propietario de este objeto Mutex de condición
|
notifyAll | () | método |
public function notifyAll():void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.5, AIR 3.5 |
Especifica que la condición representada por este objeto Condition se ha cumplido y que la propiedad del objeto Mutex volverá a todos los programas de trabajo que estén esperando el cumplimiento de esta condición.
Llamar a este método no libera automáticamente la propiedad del objeto Mutex. Después de llamar a notify()
, debe liberar explícitamente la propiedad del objeto Mutex de una de estas dos formas: llamando al método Mutex.unlock()
si el programa de trabajo actual no necesita de nuevo el objeto Mutex, o bien llamar a wait()
si el programa de trabajo deberá obtener la propiedad del objeto Mutex otra vez cuando el resto de programas de trabajo hayan finalizado sus tareas.
Una vez liberado el bloqueo del objeto Mutex, los programas de trabajo en espera reciben la propiedad de uno en uno, según el orden en el que llamaron al método wait()
. Cada programa de trabajo que haya llamado al método wait()
adquiere el objeto Mutex cuando le llega su turno y se reanuda la ejecución del código. Cuando dicho programa de trabajo llama al método Mutex.unlock()
o wait()
, la propiedad del objeto Mutex pasa al siguiente programa de trabajo en espera. Cada vez que la propiedad del objeto Mutex cambia entre programas de trabajo, la transición se lleva a cabo como una única operación atómica.
Emite
IllegalOperationError — Si el programa de trabajo actual es propietario de este objeto Mutex de condición
|
wait | () | método |
public function wait(timeout:Number = -1):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 11.5, AIR 3.5 |
Especifica que la condición representada por el objeto Condition no se cumple, y que el programa de trabajo actual debe esperar a que se cumpla para poder ejecutar más código. Llamar a este método pone en pausa el subproceso de ejecución del programa de trabajo actual y libera la propiedad del objeto Mutex de la condición. Estos pasos se realizan en una única operación atómica. El programa de trabajo permanece en pausa hasta que otro programa de trabajo llama a los métodos notify()
o notifyAll()
del objeto Condition.
Parámetros
timeout:Number (default = -1 ) — La cantidad máxima de tiempo, en milisegundos, que el programa de trabajo puede poner en pausa la ejecución antes de continuar. Si este valor es -1 (valor predeterminado), no hay tiempo de espera y la ejecución se pone en pausa indefinidamente.
|
Boolean — true si se devuelve el método por haberse agotado el tiempo de espera. En cualquier otro caso, el método devuelve false .
|
Emite
IllegalOperationError — Si el programa de trabajo actual es propietario de este objeto Mutex de condición
| |
ArgumentError — Si el argumento timeout es menor que 0 y distinto de -1
| |
ScriptTimeoutError — Si el método se llama desde el código del programa de trabajo principal en Flash Player y el programa de trabajo pone en pausa el script más tiempo del permitido (15 segundos de forma predeterminada)
| |
Error — Si se llama a este método y, mientras la ejecución del programa de trabajo que llama se pone en pausa, se cancela el programa de trabajo en espera.
|
Tue Jun 12 2018, 02:12 PM Z