Paket | flash.concurrent |
Klasse | public final class Condition |
Vererbung | Condition Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Nachstehend ist ein möglicher Arbeitsablauf für die Verwendung eines Condition-Objects aufgeführt:
- Bevor ein Condition-Objekt verwendet wird, muss der erste Worker die Eigentümerschaft des der Condition zugewiesenen Mutex übernehmen, indem die
lock()
- odertryLock()
-Methode des Mutex-Objekts aufgerufen wird. - Der Programmcode des Workers führt Operationen an der gemeinsam genutzten Ressource aus, bis eine Bedingung nicht mehr erfüllt ist. Der Worker kann dann keine weiteren Vorgänge an der gemeinsam genutzten Ressource ausführen. Wenn es sich bei der gemeinsam genutzten Ressource zum Beispiel um eine Gruppe von zu verarbeitenden Daten handelt, kann der Worker keine weiteren Vorgänge ausführen, wenn es keine Daten mehr zum Verarbeiten gibt.
- An diesem Punkt rufen Sie die
wait()
-Methode des Condition-Objekts auf, um die Ausführung anzuhalten und die Eigentümerschaft des Mutex aufzugeben. - Zu gegebener Zeit übernimmt ein zweiter Worker die Eigentümerschaft des Mutex. Da der Mutex verfügbar ist, kann der Programmcode des zweiten Workers ohne Probleme Vorgänge an der gemeinsam genutzten Ressource vornehmen. Der zweite Worker führt aus, was immer erforderlich ist, um die Bedingung zu erfüllen, damit der erste Worker seine Arbeit wiederaufnehmen kann. Wenn der erste Worker zum Beispiel keine Daten mehr zum Verarbeiten hat, kann der zweite Worker mehr zu verarbeitende Daten in die gemeinsam genutzte Ressource übergeben.
- Zu diesem Zeitpunkt ist die für den ersten Worker relevante Bedingung wieder erfüllt, sodass der erste Worker eine entsprechende Benachrichtigung erhalten muss. Um den ersten Worker zu benachrichtigen, ruft der Programmcode des zweiten Workers die
notify()
-Methode oder dienotifyAll()
-Methode des Condition-Objekts auf. - Zusätzlich zum Aufruf von
notify()
muss der zweite Worker die Eigentümerschaft des Mutex aufgeben. Dazu ruft er entweder dieunlock()
-Methode des Mutex-Objekts oder diewait()
-Methode des Condition-Objekts auf. Da der erste Worker diewait()
-Methode aufgerufen, hat, geht die Eigentümerschaft für den Mutex wieder an den ersten Worker zurück. Die Codeausführung im ersten Worker wird dann mit der nächsten Codezeile nach dem Aufruf derwait()
-Methode fortgesetzt.
Die Condition-Klasse ist eine der besonderen Objekttypen, die von Workern gemeinsam benutzt werden, anstatt dass sie zwischen ihnen kopiert werden. Wenn Sie eine Bedingung von einem Worker an einen anderen übergeben, indem Sie entweder die setSharedProperty()
-Methode des Worker-Objekts aufrufen oder ein MessageChannel-Objekt verwenden, verweisen beide Worker auf dasselbe Condition-Objekt im Arbeitsspeicher der Laufzeitumgebung.
Verwandte API-Elemente
Eigenschaft | Definiert von | ||
---|---|---|---|
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
isSupported : Boolean [statisch] [schreibgeschützt]
Gibt an, ob die Condition-Klasse für die aktuelle Plattform unterstützt wird. | Condition | ||
mutex : Mutex [schreibgeschützt]
Der mit dieser Bedingung verknüpfte Mutex. | Condition |
Methode | Definiert von | ||
---|---|---|---|
Erstellt eine neue Condition-Instanz. | Condition | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, erfüllt ist und dass die Eigentümerschaft für diesen Mutex an den nächsten Worker (falls vorhanden) zurückgegeben wird, der auf diese Bedingung wartet. | Condition | ||
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, erfüllt ist und dass die Eigentümerschaft für diesen Mutex an alle Worker zurückgegeben wird, die auf diese Bedingung warten. | Condition | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object | ||
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, nicht erfüllt ist, und dass der aktuelle Worker warten muss, bis die Bedingung wieder erfüllt ist, bevor er weiteren Code ausführen kann. | Condition |
isSupported | Eigenschaft |
isSupported:Boolean
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Gibt an, ob die Condition-Klasse für die aktuelle Plattform unterstützt wird.
Hinweis: wenn die Mutex-Klasse nicht unterstützt wird, kann keine Condition-Instanz erstellt werden und diese Eigenschaft ist false
.
Implementierung
public static function get isSupported():Boolean
mutex | Eigenschaft |
Condition | () | Konstruktor |
notify | () | Methode |
public function notify():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, erfüllt ist und dass die Eigentümerschaft für diesen Mutex an den nächsten Worker (falls vorhanden) zurückgegeben wird, der auf diese Bedingung wartet.
Der Aufruf dieser Methode gibt die Eigentümerschaft für diesen Mutex nicht automatisch frei. Nach dem Aufruf von notify()
sollten Sie die Eigentümerschaft für den Mutex auf eine von zwei Arten freigeben: Rufen Sie die Mutex.unlock()
-Methode auf, falls der aktuelle Worker den Mutex nicht wieder benötigt, oder rufen Sie wait()
auf, falls der Worker die Eigentümerschaft für den Mutex zurückbekommen soll, nachdem andere Worker ihre Arbeit abgeschlossen haben.
Nachdem die Mutexsperre aufgehoben wurde, bekommt der nächste Worker in der Warteschlange der Worker, die die wait()
-Methode aufgerufen haben, die Eigentümerschaft für den Mutex und setzt die Code-Ausführung fort.
Auslöser
IllegalOperationError — wenn der aktuelle Worker nicht Eigentümer des Mutex dieser Bedingung ist
|
notifyAll | () | Methode |
public function notifyAll():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, erfüllt ist und dass die Eigentümerschaft für diesen Mutex an alle Worker zurückgegeben wird, die auf diese Bedingung warten.
Der Aufruf dieser Methode gibt die Eigentümerschaft für diesen Mutex nicht automatisch frei. Nach dem Aufruf von notify()
sollten Sie die Eigentümerschaft für den Mutex auf eine von zwei Arten freigeben: Rufen Sie die Mutex.unlock()
-Methode auf, falls der aktuelle Worker den Mutex nicht wieder benötigt, oder rufen Sie wait()
auf, falls der Worker die Eigentümerschaft für den Mutex zurückbekommen soll, nachdem andere Worker ihre Arbeit abgeschlossen haben.
Nachdem die Sperre des Mutex aufgehoben wurde, erhalten die wartenden Worker die Eigentümerschaft nacheinander in der Reihenfolge, in der sie die wait()
-Methode aufgerufen haben. Alle Worker, der die wait()
-Methode aufgerufen haben, bekommen nacheinander die Eigentümerschaft für den Mutex und setzen die Codeausführung fort. Wenn dieser Worker die Mutex.unlock()
-Methode oder die wait()
-Methode aufruft, geht die Mutex-Eigentümerschaft an den nächsten wartenden Worker über. Jedes Mal, wenn die Mutex-Eigentümerschaft zwischen Workern wechselt, wird der Übergang als einzelne atomische Operation ausgeführt.
Auslöser
IllegalOperationError — wenn der aktuelle Worker nicht Eigentümer des Mutex dieser Bedingung ist
|
wait | () | Methode |
public function wait(timeout:Number = -1):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Gibt an, dass die Bedingung, die dieses Condition-Objekt repräsentiert, nicht erfüllt ist, und dass der aktuelle Worker warten muss, bis die Bedingung wieder erfüllt ist, bevor er weiteren Code ausführen kann. Durch den Aufruf dieser Methode wird der Ausführungsthread des aktuellen Workers angehalten und die Eigentümerschaft des Mutex der Bedingung freigegeben. Diese Schritte werden als einzelner atomischer Vorgang ausgeführt. Der Worker wird angehalten, bis ein anderer Worker die notify()
- oder notifyAll()
-Methode des Condition-Objekts aufruft.
Parameter
timeout:Number (default = -1 ) — die maximale Zeitspanne in Millisekunden, die der Worker die Ausführung vor dem Fortsetzen anhalten soll. Wenn dieser Wert -1 ist (die Standardeinstellung), gibt es keinen Timeout und die Ausführung wird auf unbestimmte Zeit angehalten.
|
Boolean — true , wenn die Methode zurückgegeben wird, weil die Zeit für das Timeout abgelaufen ist. Andernfalls gibt die Methode false zurück.
|
Auslöser
IllegalOperationError — wenn der aktuelle Worker nicht Eigentümer des Mutex dieser Bedingung ist
| |
ArgumentError — wenn das timeout -Argument weniger als 0 und nicht -1 ist
| |
ScriptTimeoutError — wenn die Methode vom Code im ursprünglichen Worker in Flash Player aufgerufen wird und der Worker länger angehalten wird als das Skript-Timeout (standardmäßig 15 Sekunden)
| |
Error — wenn die Methode aufgerufen wird und der wartende Worker beendet wird, während die Ausführung des aufrufenden Workers angehalten ist.
|
Tue Jun 12 2018, 10:04 AM Z