Paket | flash.concurrent |
Klass | public final class Condition |
Arv | Condition Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.5, AIR 3.5 |
Följande är bara ett möjligt arbetsflöde när du använder ett Condition-objekt:
- Innan ett Condition-objekt kan användas måste den första arbetaren bli ägare till villkorets associerade mutex-objekt genom att anropa mutex-objektets
lock()
- ellertryLock()
-metod. - Arbetarens kod körs på den delade resursen tills något villkor blir falskt, vilket hindrar arbetaren från att utföra mer med den delade resursen. Om den delade resursen till exempel är en datauppsättning som ska bearbetas kan arbetaren inte utföra mer när det inte längre finns data att bearbeta.
- Då anropas Condition-objektets
wait()
-metod för att pausa arbetaren och frisläppa ägarskapet för mutex-objektet. - En andra arbetare tar så småningom över ägarskapet för mutex-objektet. Eftersom mutex-objektet är tillgängligt är det riskfritt för den andra arbetarens kod att köras på den delade resursen. Den andra arbetaren gör det som krävs för att uppfylla villkoret så att den första arbetaren kan sköta sin uppgift igen. Om den första arbetaren till exempel inte har några data att bearbeta kan den andra arbetaren skicka mer data till den delade resursen för bearbetning.
- Då blir villkoret för den första arbetarens uppgift sant igen, och den första arbetaren måste meddelas om att villkoret har uppfyllts. För att meddela den första arbetaren anropar den andra arbetarens kod Condition-objektets
notify()
-metod eller dessnotifyAll()
-metod. - Utöver att anropa
notify()
måste den andra arbetaren även frisläppa ägarskapet för mutex-objektet. Detta gör den genom att anropa antingen Mutex-objektetsunlock()
-metod eller Condition-objektetswait()
-metod. Eftersom den första arbetaren anropade metodenwait()
återgår ägarskapet för mutex-objektet till den första arbetaren. Kodkörning i den första arbetaren fortsätter sedan med nästa kodrad efterwait()
-anropet.
Klassen Condition är en av de särskilda objekttyper som delas mellan arbetare i stället för att kopieras mellan dem. När du skickar ett villkor från en arbetare till en annan, antingen genom att anropa Worker-objektets setSharedProperty()
-metod eller genom att använda ett MessageChannel-objekt, har båda arbetarna en referens till samma Condition-objekt i körningsmiljöns minne.
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
isSupported : Boolean [statisk] [skrivskyddad]
Anger om klassen Condition stöds på den aktuella plattformen. | Condition | ||
mutex : Mutex [skrivskyddad]
Den mutex som är associerad med detta villkor. | Condition |
Metod | Definieras med | ||
---|---|---|---|
Skapar en ny Condition-instans. | Condition | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger att det villkor som det här Condition-objektet representerar har uppfyllts och att ägarskapet för mutex-objektet kommer att övergå till nästa arbetare som väntar på det här villkoret (om det finns någon). | Condition | ||
Anger att det villkor som det här Condition-objektet representerar har uppfyllts och att ägarskapet för mutex-objektet kommer att återgå till alla arbetare som väntar på det här villkoret. | Condition | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object | ||
Anger att det villkor som det här Condition-objektet representerar inte har uppfyllts och att den aktuella arbetaren måste vänta tills det uppfylls innan mer kod kan köras. | Condition |
isSupported | egenskap |
isSupported:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.5, AIR 3.5 |
Anger om klassen Condition stöds på den aktuella plattformen.
Obs! Om klassen Mutex inte stöds går det inte att skapa någon Condition-instans och den här egenskapen är false
.
Implementering
public static function get isSupported():Boolean
mutex | egenskap |
Condition | () | Konstruktor |
notify | () | metod |
public function notify():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.5, AIR 3.5 |
Anger att det villkor som det här Condition-objektet representerar har uppfyllts och att ägarskapet för mutex-objektet kommer att övergå till nästa arbetare som väntar på det här villkoret (om det finns någon).
Anrop av den här metoden frisläpper inte automatiskt ägarskapet för mutex-objektet. När notify()
har anropats bör du frisläppa ägarskapet för mutex-objektet explicit på ett av två sätt: anropa metoden Mutex.unlock()
om den aktuella arbetaren inte behöver mutex-objektet igen eller anropa wait()
om arbetaren ska få tillbaka ägarskapet för mutex-objektet igen när andra arbetare är klara med sina uppgifter.
När mutex-objektets frisläpps får nästa arbetare i kön med arbetare som har anropat metoden wait()
ta över mutex-objektet och återuppta kodkörningen.
Utlöser
IllegalOperationError — om den aktuella arbetaren inte äger det här villkorets mutex-objekt.
|
notifyAll | () | metod |
public function notifyAll():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.5, AIR 3.5 |
Anger att det villkor som det här Condition-objektet representerar har uppfyllts och att ägarskapet för mutex-objektet kommer att återgå till alla arbetare som väntar på det här villkoret.
Anrop av den här metoden frisläpper inte automatiskt ägarskapet för mutex-objektet. När notify()
har anropats bör du frisläppa ägarskapet för mutex-objektet explicit på ett av två sätt: anropa metoden Mutex.unlock()
om den aktuella arbetaren inte behöver mutex-objektet igen eller anropa wait()
om arbetaren ska få tillbaka ägarskapet för mutex-objektet igen när andra arbetare är klara med sina uppgifter.
När mutex-objektets frisläpps får de väntande arbetarna tillbaka ägarskapet en i taget i den ordning de anropade wait()
-metoden. Alla arbetare som har anropat wait()
-metoden får tillbaka mutex-objektet i turordning och återupptar kodkörningen. När den första arbetaren anropar metoden Mutex.unlock()
eller wait()
övergår mutex-ägarskapet till nästa väntande arbetare. Varje gång mutex-ägarskapet växlar mellan arbetare utförs övergången som en enda atomisk åtgärd.
Utlöser
IllegalOperationError — om den aktuella arbetaren inte äger det här villkorets mutex-objekt.
|
wait | () | metod |
public function wait(timeout:Number = -1):Boolean
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.5, AIR 3.5 |
Anger att det villkor som det här Condition-objektet representerar inte har uppfyllts och att den aktuella arbetaren måste vänta tills det uppfylls innan mer kod kan köras. Anrop av den här metoden pausar den aktuella arbetarens körningstråd och frisläpper ägarskapet för villkorets mutex-objekt. Dessa steg utförs som en enda atomisk åtgärd. Arbetaren förblir pausad tills en annan arbetare anropar det här Condition-objektets notify()
- eller notifyAll()
-metod.
Parametrar
timeout:Number (default = -1 ) — den längsta tillåtna tid, i millisekunder, som arbetaren får pausa körningen innan den återupptas. Om det här värdet är -1 (standardvärdet) finns det ingen tidsgräns och körningen pausas på obestämd tid.
|
Boolean — true om metoden returnerades på grund av att tidsgränsen nåtts. Annars returnerar metoden false .
|
Utlöser
IllegalOperationError — om den aktuella arbetaren inte äger det här villkorets mutex-objekt.
| |
ArgumentError — om argumentet timeout är mindre än 0 och inte -1.
| |
ScriptTimeoutError — om metoden anropas från kod i den ursprungliga arbetaren i Flash Player och arbetaren pausar längre än skriptets tidsgräns tillåter (15 sekunder som standard).
| |
Error — om metoden anropas och den väntande arbetaren avslutas under tiden den anropande arbetarens körning är pausad.
|
Tue Jun 12 2018, 01:40 PM Z