Langage

CountDownLatch Classe

Définition

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

[Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)]
public class CountDownLatch : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)>]
type CountDownLatch = class
    inherit Object
Héritage
CountDownLatch
Attributs

Remarques

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

A CountDownLatch est initialisé avec un nombre< d’em>/em< donnés>. Les #await await méthodes bloquent jusqu’à ce que le nombre actuel atteigne zéro en raison d’appels de la #countDown méthode, après quoi tous les threads en attente sont libérés et les appels suivants de #await await retour immédiatement. Il s’agit d’un phénomène d’un coup - le nombre ne peut pas être réinitialisé. Si vous avez besoin d’une version qui réinitialise le nombre, envisagez d’utiliser un CyclicBarrier.

Il CountDownLatch s’agit d’un outil de synchronisation polyvalent et peut être utilisé à plusieurs fins. Un CountDownLatch initialisé avec un nombre d’un sert de verrou simple activé/désactivé, ou de porte : tous les threads appelant attendent #await await à la porte jusqu’à ce qu’il soit ouvert par un thread appelant #countDown. Un CountDownLatch thread initialisé sur <em>N</em> peut être utilisé pour faire attendre un thread jusqu’à ce que <les threads em>N</em> aient terminé une action, ou une action a été effectuée N fois.

Une propriété utile d’un CountDownLatch est qu’il n’exige pas que les threads appelant countDown attendent que le nombre atteigne zéro avant de continuer, il empêche simplement tout thread de continuer après une #await await jusqu’à ce que tous les threads puissent passer.

<b>Exemple d’utilisation :</b> Voici une paire de classes dans lesquelles un groupe de threads de travail utilisent deux latches de compte à rebours : <ul><li Est>un signal de démarrage qui empêche tout worker de continuer jusqu’à ce que le pilote soit prêt à continuer ; <li>Le second est un signal d’achèvement qui permet au conducteur d’attendre que tous les travailleurs aient terminé. </ul>

{@code
            class Driver { // ...
              void main() throws InterruptedException {
                CountDownLatch startSignal = new CountDownLatch(1);
                CountDownLatch doneSignal = new CountDownLatch(N);

                for (int i = 0; i < N; ++i) // create and start threads
                  new Thread(new Worker(startSignal, doneSignal)).start();

                doSomethingElse();            // don't let run yet
                startSignal.countDown();      // let all threads proceed
                doSomethingElse();
                doneSignal.await();           // wait for all to finish
              }
            }

            class Worker implements Runnable {
              private final CountDownLatch startSignal;
              private final CountDownLatch doneSignal;
              Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
                this.startSignal = startSignal;
                this.doneSignal = doneSignal;
              }
              public void run() {
                try {
                  startSignal.await();
                  doWork();
                  doneSignal.countDown();
                } catch (InterruptedException ex) {} // return;
              }

              void doWork() { ... }
            }}

Une autre utilisation classique consiste à diviser un problème en parties N, à décrire chaque partie avec un Runnable qui exécute cette partie et compte en bas sur le verrou, et met en file d’attente tous les Runnables à un exécuteur. Lorsque toutes les sous-parties sont terminées, le thread de coordination peut passer par await. (Lorsque les threads doivent compter à plusieurs reprises de cette façon, utilisez plutôt un CyclicBarrier.)

{@code
            class Driver2 { // ...
              void main() throws InterruptedException {
                CountDownLatch doneSignal = new CountDownLatch(N);
                Executor e = ...;

                for (int i = 0; i < N; ++i) // create and start threads
                  e.execute(new WorkerRunnable(doneSignal, i));

                doneSignal.await();           // wait for all to finish
              }
            }

            class WorkerRunnable implements Runnable {
              private final CountDownLatch doneSignal;
              private final int i;
              WorkerRunnable(CountDownLatch doneSignal, int i) {
                this.doneSignal = doneSignal;
                this.i = i;
              }
              public void run() {
                doWork();
                doneSignal.countDown();
              }

              void doWork() { ... }
            }}

Effets de cohérence de la mémoire : jusqu’à ce que le nombre atteigne zéro, les actions d’un thread avant d’appeler countDown()<i>happen-before</i> , suite à un retour réussi d’un thread correspondant await() dans un autre thread.

Ajouté à la version 1.5.

Java documentation pour java.util.concurrent.CountDownLatch.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
CountDownLatch(Int32)

Construit un CountDownLatch initialisé avec le nombre donné.

CountDownLatch(IntPtr, JniHandleOwnership)

Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
Count

Retourne le nombre actuel.

Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
JniPeerMembers

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

Méthodes

Nom Description
Await()

Provoque l’attente du thread actuel jusqu’à ce que le verrou ait compté jusqu’à zéro, sauf si le thread est interrompu par thread#interruption.

Await(Int64, TimeUnit)

Provoque l’attente du thread actuel jusqu’à ce que le verrou ait compté jusqu’à zéro, sauf si le thread est interrompu par thread#interruption, ou que le temps d’attente spécifié s’écoule.

AwaitAsync()

Attend de façon asynchrone que le nombre de verrous atteigne zéro.

AwaitAsync(Int64, TimeUnit)

Attend de façon asynchrone que le nombre de verrous atteigne zéro ou que le temps d’attente spécifié s’écoule.

Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
CountDown()

Décrémente le nombre de verrous, libérant tous les threads en attente si le nombre atteint zéro.

Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
Equals(Object)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
GetHashCode()

Retourne une valeur de code de hachage pour l'objet.

(Hérité de Object)
JavaFinalize()

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation de chaîne de l'objet.

(Hérité de Object)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
IJavaPeerable.Finalized()

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

(Hérité de JavaObject)

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Aide de synchronisation qui permet à un ou plusieurs threads d’attendre qu’un ensemble d’opérations en cours d’exécution dans d’autres threads se termine.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à