CountedCompleter 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.
Avec ForkJoinTask
une action de saisie semi-automatique effectuée lorsqu’elle est déclenchée et qu’il n’y a pas d’actions en attente restantes.
[Android.Runtime.Register("java/util/concurrent/CountedCompleter", ApiSince=24, DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public abstract class CountedCompleter : Java.Util.Concurrent.ForkJoinTask
[<Android.Runtime.Register("java/util/concurrent/CountedCompleter", ApiSince=24, DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type CountedCompleter = class
inherit ForkJoinTask
- Héritage
- Attributs
Remarques
Avec ForkJoinTask
une action de saisie semi-automatique effectuée lorsqu’elle est déclenchée et qu’il n’y a pas d’actions en attente restantes. Les countedCompleters sont en général plus robustes en présence d’étalons de sous-tâches et de blocage que d’autres formes de ForkJoinTasks, mais sont moins intuitifs pour programmer. Les utilisations de CountedCompleter sont similaires à celles d’autres composants basés sur l’achèvement (par exemple java.nio.channels.CompletionHandler
), sauf que plusieurs <achèvements em>en attente</em> peuvent être nécessaires pour déclencher l’action #onCompletion(CountedCompleter)
d’achèvement, pas seulement une. À moins d’initialiser autrement, le nombre d'#getPendingCount en attente commence à zéro, mais peut être (atomiquement) modifié à l’aide de méthodes #setPendingCount
, #addToPendingCount
et #compareAndSetPendingCount
. Lors de l’appel de , si le nombre d’actions en attente n’est pas différent de zéro, il est décrémenté ; sinon, l’action d’achèvement #tryComplete
est effectuée, et si ce completer lui-même a un completer, le processus est poursuivi avec son completer. Comme c’est le cas avec des composants de synchronisation connexes tels que Phaser
et Semaphore
, ces méthodes affectent uniquement les nombres internes ; elles n’établissent aucune autre comptabilité interne. En particulier, les identités des tâches en attente ne sont pas conservées. Comme illustré ci-dessous, vous pouvez créer des sous-classes qui enregistrent certaines ou toutes les tâches en attente ou leurs résultats si nécessaire. Comme illustré ci-dessous, les méthodes utilitaires prenant en charge la personnalisation des traversées d’achèvement sont également fournies. Toutefois, étant donné que les CountedCompleters fournissent uniquement des mécanismes de synchronisation de base, il peut être utile de créer d’autres sous-classes abstraites qui conservent des liaisons, des champs et des méthodes de prise en charge supplémentaires appropriées pour un ensemble d’utilisations connexes.
Une classe CountedCompleter concrète doit définir la méthode #compute
, qui doit dans la plupart des cas (comme illustré ci-dessous), appeler tryComplete()
une fois avant de retourner. La classe peut également remplacer éventuellement la méthode #onCompletion(CountedCompleter)
pour effectuer une action à l’achèvement normal et la méthode #onExceptionalCompletion(Throwable, CountedCompleter)
pour effectuer une action à toute exception.
Lescompleters comptés ne portent généralement pas de résultats, auquel cas ils sont normalement déclarés comme CountedCompleter<Void>
, et retournent null
toujours en tant que valeur de résultat. Dans d’autres cas, vous devez remplacer la méthode #getRawResult
pour fournir un résultat à partir des join(), invoke()
méthodes associées. En règle générale, cette méthode doit retourner la valeur d’un champ (ou d’une fonction d’un ou plusieurs champs) de l’objet CountedCompleter qui contient le résultat à la fin. La méthode #setRawResult
par défaut ne joue aucun rôle dans CountedCompleters. Il est possible, mais rarement applicable, de remplacer cette méthode pour conserver d’autres objets ou champs contenant des données de résultat.
Un CountedCompleter qui n’a pas lui-même un completer (c’est-à-dire un pour lequel #getCompleter
retourne null
) peut être utilisé comme forkJoinTask standard avec cette fonctionnalité ajoutée. Toutefois, tout completer qui à son tour a un autre completer sert uniquement d’assistance interne pour d’autres calculs, de sorte que son propre état de tâche (tel que signalé dans des méthodes telles que ForkJoinTask#isDone
) est arbitraire ; cet état change uniquement en cas d’appel explicite de , ForkJoinTask#cancel
ForkJoinTask#completeExceptionally(Throwable)
ou lors de #complete
l’achèvement exceptionnel de la méthode compute
. À l’issue d’une exécution exceptionnelle, l’exception peut être relayée à l’completer d’une tâche (et à son completer, et ainsi de suite), si elle existe et qu’elle n’est pas déjà terminée. De même, l’annulation d’un countedCompleter interne n’a qu’un effet local sur ce completer, ce qui n’est pas souvent utile.
<b>Exemples d’utilisations.</b>
<b>Décomposition récursive parallèle.</b> CountedCompleters peut être organisé dans des arbres similaires à ceux souvent utilisés avec RecursiveAction
s, bien que les constructions impliquées dans leur configuration varient généralement. Ici, l’completer de chaque tâche est son parent dans l’arborescence de calcul. Même s’ils impliquent un peu plus de comptabilité, CountedCompleters peut être de meilleurs choix lors de l’application d’une opération éventuellement fastidieuse (qui ne peut pas être subdividée) à chaque élément d’un tableau ou d’une collection ; en particulier lorsque l’opération prend beaucoup de temps pour se terminer pour certains éléments que d’autres, soit en raison d’une variation intrinsèque (par exemple, d’E/S) ou d’effets auxiliaires tels que le garbage collection. Étant donné que LesCompleters fournissent leurs propres continuations, d’autres tâches n’ont pas besoin de bloquer l’attente pour les effectuer.
Par exemple, voici une version initiale d’une méthode utilitaire qui utilise la décomposition récursive de division par deux pour diviser le travail en morceaux uniques (tâches feuilles). Même lorsque le travail est fractionné en appels individuels, les techniques basées sur les arborescences sont généralement préférables à l’exécution directe des tâches feuilles, car elles réduisent la communication entre threads et améliorent l’équilibrage de charge. Dans le cas récursif, la seconde de chaque paire de tâches subordonnées pour terminer l’achèvement de leur parent (car aucune combinaison de résultats n’est effectuée, l’implémentation sans opération par défaut de la méthode onCompletion
n’est pas substituée). La méthode utilitaire configure la tâche racine et l’appelle (ici, implicitement à l’aide de l’objet ForkJoinPool#commonPool()
). Il est simple et fiable (mais pas optimal) de toujours définir le nombre en attente sur le nombre de tâches enfants et d’appeler tryComplete()
immédiatement avant de retourner.
{@code
public static <E> void forEach(E[] array, Consumer<E> action) {
class Task extends CountedCompleter<Void> {
final int lo, hi;
Task(Task parent, int lo, int hi) {
super(parent); this.lo = lo; this.hi = hi;
}
public void compute() {
if (hi - lo >= 2) {
int mid = (lo + hi) >>> 1;
// must set pending count before fork
setPendingCount(2);
new Task(this, mid, hi).fork(); // right child
new Task(this, lo, mid).fork(); // left child
}
else if (hi > lo)
action.accept(array[lo]);
tryComplete();
}
}
new Task(null, 0, array.length).invoke();
}}
Cette conception peut être améliorée en notant que dans le cas récursif, la tâche n’a rien à faire après la saisie de sa tâche appropriée, afin de pouvoir appeler directement sa tâche de gauche avant de retourner. (Il s’agit d’un analogue de la suppression de la récursivité de la queue.) En outre, lorsque la dernière action d’une tâche consiste à fork ou à appeler un sous-tâche (un « appel de queue »), l’appel à tryComplete()
optimiser peut être optimisé, au coût de l’affichage du nombre en attente « off by one ».
{@code
public void compute() {
if (hi - lo >= 2) {
int mid = (lo + hi) >>> 1;
setPendingCount(1); // looks off by one, but correct!
new Task(this, mid, hi).fork(); // right child
new Task(this, lo, mid).compute(); // direct invoke
} else {
if (hi > lo)
action.accept(array[lo]);
tryComplete();
}
}}
En guise d’optimisation supplémentaire, notez que la tâche de gauche n’a même pas besoin d’exister. Au lieu de créer un nouveau, nous pouvons continuer à utiliser la tâche d’origine et ajouter un nombre en attente pour chaque fourche. En outre, étant donné qu’aucune tâche dans cette arborescence implémente une #onCompletion(CountedCompleter)
méthode, tryComplete
peut être remplacée par #propagateCompletion
.
{@code
public void compute() {
int n = hi - lo;
for (; n >= 2; n /= 2) {
addToPendingCount(1);
new Task(this, lo + n/2, lo + n).fork();
}
if (n > 0)
action.accept(array[lo]);
propagateCompletion();
}}
Lorsque les nombres en attente peuvent être précomputés, ils peuvent être établis dans le constructeur :
{@code
public static <E> void forEach(E[] array, Consumer<E> action) {
class Task extends CountedCompleter<Void> {
final int lo, hi;
Task(Task parent, int lo, int hi) {
super(parent, 31 - Integer.numberOfLeadingZeros(hi - lo));
this.lo = lo; this.hi = hi;
}
public void compute() {
for (int n = hi - lo; n >= 2; n /= 2)
new Task(this, lo + n/2, lo + n).fork();
action.accept(array[lo]);
propagateCompletion();
}
}
if (array.length > 0)
new Task(null, 0, array.length).invoke();
}}
D’autres optimisations de ces classes peuvent impliquer des classes spécialisées pour les étapes feuilles, la sous-division par exemple, quatre, au lieu de deux par itération, et l’utilisation d’un seuil adaptatif au lieu de toujours subdivider vers des éléments uniques.
<b>Recherche.</b> Une arborescence de CountedCompleters peut rechercher une valeur ou une propriété dans différentes parties d’une structure de données et signaler un résultat java.util.concurrent.atomic.AtomicReference AtomicReference
dès qu’un objet est trouvé. Les autres peuvent interroger le résultat pour éviter tout travail inutile. (Vous pouvez également #cancel annuler d’autres tâches, mais il est généralement plus simple et plus efficace de les laisser remarquer que le résultat est défini et, si tel est le cas, ignorez le traitement supplémentaire.) Illustration à nouveau d’un tableau utilisant le partitionnement complet (encore une fois, dans la pratique, les tâches feuilles traiteront presque toujours plusieurs éléments) :
{@code
class Searcher<E> extends CountedCompleter<E> {
final E[] array; final AtomicReference<E> result; final int lo, hi;
Searcher(CountedCompleter<?> p, E[] array, AtomicReference<E> result, int lo, int hi) {
super(p);
this.array = array; this.result = result; this.lo = lo; this.hi = hi;
}
public E getRawResult() { return result.get(); }
public void compute() { // similar to ForEach version 3
int l = lo, h = hi;
while (result.get() == null && h >= l) {
if (h - l >= 2) {
int mid = (l + h) >>> 1;
addToPendingCount(1);
new Searcher(this, array, result, mid, h).fork();
h = mid;
}
else {
E x = array[l];
if (matches(x) && result.compareAndSet(null, x))
quietlyCompleteRoot(); // root task is now joinable
break;
}
}
tryComplete(); // normally complete whether or not found
}
boolean matches(E e) { ... } // return true if found
public static <E> E search(E[] array) {
return new Searcher<E>(null, array, new AtomicReference<E>(), 0, array.length).invoke();
}
}}
Dans cet exemple, ainsi que d’autres dans lesquels les tâches n’ont pas d’autres effets, à l’exception compareAndSet
d’un résultat commun, l’appel sans condition de fin de tryComplete
la tâche peut être rendu conditionnel (if (result.get() == null) tryComplete();
) car aucune autre comptabilité n’est nécessaire pour gérer les achèvements une fois la tâche racine terminée.
<b>Sous-tâches d’enregistrement.</b> Les tâches CountedCompleter qui combinent les résultats de plusieurs tâches subordonnées doivent généralement accéder à ces résultats dans la méthode #onCompletion(CountedCompleter)
. Comme illustré dans la classe suivante (qui effectue une forme simplifiée de map-reduce où les mappages et les réductions sont tous de type E
), une façon de le faire dans les conceptions de division et de conquête est d’avoir chaque sous-tâche enregistrer son frère, afin qu’il soit accessible dans la méthode onCompletion
. Cette technique s’applique aux réductions dans lesquelles l’ordre de combinaison des résultats gauche et droit n’a pas d’importance ; les réductions ordonnées nécessitent des désignations explicites de gauche/droite. Les variantes d’autres rationalisations observées dans les exemples ci-dessus peuvent également s’appliquer.
{@code
class MyMapper<E> { E apply(E v) { ... } }
class MyReducer<E> { E apply(E x, E y) { ... } }
class MapReducer<E> extends CountedCompleter<E> {
final E[] array; final MyMapper<E> mapper;
final MyReducer<E> reducer; final int lo, hi;
MapReducer<E> sibling;
E result;
MapReducer(CountedCompleter<?> p, E[] array, MyMapper<E> mapper,
MyReducer<E> reducer, int lo, int hi) {
super(p);
this.array = array; this.mapper = mapper;
this.reducer = reducer; this.lo = lo; this.hi = hi;
}
public void compute() {
if (hi - lo >= 2) {
int mid = (lo + hi) >>> 1;
MapReducer<E> left = new MapReducer(this, array, mapper, reducer, lo, mid);
MapReducer<E> right = new MapReducer(this, array, mapper, reducer, mid, hi);
left.sibling = right;
right.sibling = left;
setPendingCount(1); // only right is pending
right.fork();
left.compute(); // directly execute left
}
else {
if (hi > lo)
result = mapper.apply(array[lo]);
tryComplete();
}
}
public void onCompletion(CountedCompleter<?> caller) {
if (caller != this) {
MapReducer<E> child = (MapReducer<E>)caller;
MapReducer<E> sib = child.sibling;
if (sib == null || sib.result == null)
result = child.result;
else
result = reducer.apply(child.result, sib.result);
}
}
public E getRawResult() { return result; }
public static <E> E mapReduce(E[] array, MyMapper<E> mapper, MyReducer<E> reducer) {
return new MapReducer<E>(null, array, mapper, reducer,
0, array.length).invoke();
}
}}
Ici, la méthode onCompletion
prend une forme commune à de nombreuses conceptions d’achèvement qui combinent les résultats. Cette méthode de style de rappel est déclenchée une fois par tâche, dans l’un des deux contextes différents dans lesquels le nombre en attente est, ou devient, zéro : (1) par une tâche elle-même, si son nombre en attente est égal à zéro lors de l’appel de , ou (2) par l’une de tryComplete
ses sous-tâches lorsqu’ils se terminent et décrémentent le nombre en attente à zéro. L’argument caller
distingue les cas. Le plus souvent, lorsque l’appelant est this
, aucune action n’est nécessaire. Sinon, l’argument de l’appelant peut être utilisé (généralement via un cast) pour fournir une valeur (et/ou des liens vers d’autres valeurs) à combiner. En supposant l’utilisation appropriée des nombres en attente, les actions à l’intérieur onCompletion
se produisent (une fois) à l’achèvement d’une tâche et de ses sous-tâches. Aucune synchronisation supplémentaire n’est requise dans cette méthode pour garantir la sécurité des threads des accès aux champs de cette tâche ou à d’autres tâches terminées.
<b>Traversées d’achèvement.</b> Si l’utilisation onCompletion
pour traiter les achèvements est inapplicable ou peu pratique, vous pouvez utiliser des méthodes #firstComplete
et #nextComplete
créer des traversées personnalisées. Par exemple, pour définir un MapReducer qui fractionne uniquement les tâches de droite sous la forme du troisième exemple ForEach, les achèvements doivent réduire de manière coopérative le long des liens de sous-tâches nonhaussés, ce qui peut être effectué comme suit :
{@code
class MapReducer<E> extends CountedCompleter<E> { // version 2
final E[] array; final MyMapper<E> mapper;
final MyReducer<E> reducer; final int lo, hi;
MapReducer<E> forks, next; // record subtask forks in list
E result;
MapReducer(CountedCompleter<?> p, E[] array, MyMapper<E> mapper,
MyReducer<E> reducer, int lo, int hi, MapReducer<E> next) {
super(p);
this.array = array; this.mapper = mapper;
this.reducer = reducer; this.lo = lo; this.hi = hi;
this.next = next;
}
public void compute() {
int l = lo, h = hi;
while (h - l >= 2) {
int mid = (l + h) >>> 1;
addToPendingCount(1);
(forks = new MapReducer(this, array, mapper, reducer, mid, h, forks)).fork();
h = mid;
}
if (h > l)
result = mapper.apply(array[l]);
// process completions by reducing along and advancing subtask links
for (CountedCompleter<?> c = firstComplete(); c != null; c = c.nextComplete()) {
for (MapReducer t = (MapReducer)c, s = t.forks; s != null; s = t.forks = s.next)
t.result = reducer.apply(t.result, s.result);
}
}
public E getRawResult() { return result; }
public static <E> E mapReduce(E[] array, MyMapper<E> mapper, MyReducer<E> reducer) {
return new MapReducer<E>(null, array, mapper, reducer,
0, array.length, null).invoke();
}
}}
<b>Déclencheurs.</b> Certains CountedCompleters ne sont jamais forked, mais servent plutôt de bits de plomberie dans d’autres conceptions ; y compris ceux dans lesquels l’achèvement d’une ou plusieurs tâches asynchrones déclenche une autre tâche asynchrone. Par exemple :
{@code
class HeaderBuilder extends CountedCompleter<...> { ... }
class BodyBuilder extends CountedCompleter<...> { ... }
class PacketSender extends CountedCompleter<...> {
PacketSender(...) { super(null, 1); ... } // trigger on second completion
public void compute() { } // never called
public void onCompletion(CountedCompleter<?> caller) { sendPacket(); }
}
// sample use:
PacketSender p = new PacketSender();
new HeaderBuilder(p, ...).fork();
new BodyBuilder(p, ...).fork();}
Ajouté dans la version 1.8.
Documentation Java pour java.util.concurrent.CountedCompleter
.
Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.
Constructeurs
CountedCompleter() |
Crée un countCompleter CountCompleter sans completer et un nombre initial en attente de zéro. |
CountedCompleter(CountedCompleter) |
Crée un countCompleter CountCompleter avec l’élément complet donné et un nombre initial en attente de zéro. |
CountedCompleter(CountedCompleter, Int32) |
Crée un countcompleter CountCompleter avec l’élément complet donné et le nombre initial en attente. |
CountedCompleter(IntPtr, JniHandleOwnership) |
Avec |
Propriétés
Class |
Retourne la classe runtime de ce |
Completer |
Retourne le completer établi dans le constructeur de cette tâche, ou |
Exception |
Retourne l’exception levée par le calcul de base, ou si |
ForkJoinTaskTag |
Retourne la balise de cette tâche. (Hérité de ForkJoinTask) |
Handle |
Handle de l’instance Android sous-jacente. (Hérité de Object) |
IsCancelled |
Retourne |
IsCompletedAbnormally |
Retourne |
IsCompletedNormally |
Retourne |
IsDone |
Retourne |
JniIdentityHashCode |
Avec |
JniPeerMembers |
Avec |
PeerReference |
Avec |
PendingCount |
Retourne le nombre en attente actuel. -ou- Définit le nombre en attente sur la valeur donnée. |
RawRawResult |
Retourne le résultat retourné par Join(), même si cette tâche s’est terminée anormalement ou |
RawResult |
Retourne le résultat du calcul. |
Root |
Retourne la racine du calcul actuel ; Je. |
ThresholdClass |
Avec |
ThresholdType |
Avec |
Méthodes
AddToPendingCount(Int32) |
Ajoute (atomiquement) la valeur donnée au nombre en attente. |
Cancel(Boolean) |
Tente d’annuler l’exécution de cette tâche. (Hérité de ForkJoinTask) |
Clone() |
Crée et retourne une copie de cet objet. (Hérité de Object) |
CompareAndSetForkJoinTaskTag(Int16, Int16) |
Définit de manière conditionnelle la valeur de balise de cette tâche de manière atomique. (Hérité de ForkJoinTask) |
CompareAndSetPendingCount(Int32, Int32) |
Définit (atomiquement) le nombre en attente sur le nombre donné uniquement s’il contient actuellement la valeur attendue donnée. |
Complete(Object) |
Quel que soit le nombre en attente, appelle |
CompleteExceptionally(Throwable) |
Termine cette tâche anormalement et, si elle n’est pas déjà abandonnée ou annulée, elle lève l’exception donnée sur |
Compute() |
Calcul principal effectué par cette tâche. |
DecrementPendingCountUnlessZero() |
Si le nombre en attente est différent de zéro, (atomiquement) le décrémente. |
Dispose() |
Avec |
Dispose(Boolean) |
Avec |
Equals(Object) |
Indique si un autre objet est « égal à » celui-ci. (Hérité de Object) |
Exec() |
Implémente des conventions d’exécution pour CountedCompleters. |
FirstComplete() |
Si le nombre en attente de cette tâche est égal à zéro, retourne cette tâche ; sinon décrémente son nombre en attente et retourne |
Fork() |
Organise l’exécution asynchrone de cette tâche dans le pool dans lequel la tâche actuelle s’exécute, le cas échéant, ou en utilisant le |
Get() |
Attend si nécessaire que le calcul se termine, puis récupère son résultat. (Hérité de ForkJoinTask) |
Get(Int64, TimeUnit) |
Attend si nécessaire pour que le calcul soit terminé au maximum, puis récupère son résultat, le cas échéant. (Hérité de ForkJoinTask) |
GetHashCode() |
Retourne une valeur de code de hachage pour l'objet. (Hérité de Object) |
HelpComplete(Int32) |
Si cette tâche n’est pas terminée, tente de traiter au maximum le nombre donné d’autres tâches non traitées pour lesquelles cette tâche se trouve sur le chemin d’achèvement, le cas échéant. |
Invoke() |
Commence à effectuer cette tâche, attend sa fin si nécessaire et retourne son résultat, ou lève une (décochée) |
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) |
Join() |
Retourne le résultat du calcul lorsqu’il #isDone est terminé. (Hérité de ForkJoinTask) |
NextComplete() |
Si cette tâche n’a pas d’élément complet, appelle |
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) |
OnCompletion(CountedCompleter) |
Effectue une action lorsque la méthode |
OnExceptionalCompletion(Throwable, CountedCompleter) |
Effectue une action lorsque la méthode est appelée ou que la méthode |
PropagateCompletion() |
Équivalent à |
QuietlyComplete() |
Termine cette tâche normalement sans définir de valeur. (Hérité de ForkJoinTask) |
QuietlyCompleteRoot() |
Équivaut à |
QuietlyInvoke() |
Commence à effectuer cette tâche et attend sa fin si nécessaire, sans retourner son résultat ou lever son exception. (Hérité de ForkJoinTask) |
QuietlyJoin() |
Joint cette tâche, sans retourner son résultat ou lever son exception. (Hérité de ForkJoinTask) |
Reinitialize() |
Réinitialise l’état interne de la comptabilité de cette tâche, ce qui permet d’obtenir un résultat ultérieur |
SetForkJoinTaskTag(Int16) |
Définit atomiquement la valeur de balise pour cette tâche et retourne l’ancienne valeur. (Hérité de ForkJoinTask) |
SetHandle(IntPtr, JniHandleOwnership) |
Définit la propriété Handle. (Hérité de Object) |
SetRawResult(Object) |
Une méthode qui porte le résultat CountedCompleters peut éventuellement être utilisée pour aider à maintenir les données de résultat. |
ToArray<T>() |
Avec |
ToString() |
Retourne une représentation de chaîne de l'objet. (Hérité de Object) |
TryComplete() |
Si le nombre en attente est différent de zéro, décrémente le nombre ; sinon, appelle |
TryUnfork() |
Tente de déplanifier cette tâche pour l’exécution. (Hérité de ForkJoinTask) |
UnregisterFromRuntime() |
Avec |
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) |
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, 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) |
Implémentations d’interfaces explicites
IJavaPeerable.Disposed() |
Avec |
IJavaPeerable.DisposeUnlessReferenced() |
Avec |
IJavaPeerable.Finalized() |
Avec |
IJavaPeerable.JniManagedPeerState |
Avec |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Avec |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Avec |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Avec |
Méthodes d’extension
JavaCast<TResult>(IJavaObject) |
Effectue une conversion de type vérifiée par le runtime Android. |
JavaCast<TResult>(IJavaObject) |
Avec |
GetJniTypeName(IJavaPeerable) |
Avec |
GetAsync(IFuture) |
Avec |
GetAsync(IFuture, Int64, TimeUnit) |
Avec |