CountDownLatch Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- 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(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 |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Essayez de forcer |
| 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 |