Recommandé, 2024

Choix De L'Éditeur

Différence entre les méthodes sleep () et wait () en Java

La méthode sleep et wait semble faire la même chose, mais ils sont très différents les uns des autres. La méthode Sleep appartient à la classe Thread et la méthode wait à la classe Object. La différence la plus importante qui les distingue est que la méthode sleep maintient le verrou sur l'objet jusqu'à ce qu'il soit interrompu ou qu'il termine son exécution. D'autre part, la méthode wait libère le verrou sur l'objet pour permettre aux autres objets de s'exécuter jusqu'à ce que la méthode notify le reprenne. Il existe quelques différences supplémentaires entre les méthodes sommeil et attente; vous pouvez les explorer dans le tableau de comparaison ci-dessous.

Tableau de comparaison

Base de comparaisondormirattendre
De baseLa méthode de veille ne libère pas le verrou d'un objet tant qu'il n'est pas interrompu.La méthode Wait libère le verrou sur l'objet pour permettre à d'autres objets de s'exécuter jusqu'à ce que la méthode notify ou notifyAll soit invoquée.
ClasseLa méthode de veille est définie dans la classe Thread.La méthode d'attente est définie dans la classe Object.
SynchroniséLa méthode de veille n'a pas besoin d'être appelée dans un contexte synchronisé.La méthode d'attente doit être appelée dans le contexte Synchronisé.
AchèvementL'exécution de la méthode de veille est terminée lorsqu'un thread l'interrompt ou que la méthode de veille est expirée.L'exécution de la méthode d'attente est terminée lorsque la méthode notify () ou notifyAll () l'interrompt.
StatiqueLa méthode de sommeil est une méthode statique.La méthode Wait n'est pas statique, c'est pourquoi elle a besoin d'un objet pour l'invoquer.
ExécutionLa méthode sleep est exécutée sur le thread actuel.La méthode wait est exécutée sur l'objet.
ExceptionInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Définition de la méthode du sommeil

La méthode sleep est la méthode statique de la classe Thread . La méthode sleep est appelée lorsqu'un thread ne souhaite effectuer aucune tâche pendant un laps de temps donné. La méthode sleep termine son exécution lorsque son temps est écoulé ou est interrompue par un autre thread de l'exécution. Une fois la méthode de sommeil terminée, le thread reprend son statut d'exécution. Il existe deux méthodes de sommeil, comme indiqué ci-dessous.

 sommeil statique public natif (long milliseconde); sommeil vide statique public (longues millisecondes et nanoseconde); 

Dans la forme ci-dessus deux, vous pouvez observer le temps est mentionné dans les deux formes de la méthode du sommeil. Cela est dû au fait qu'un thread dort toujours pendant un temps particulier mentionné dans le paramètre. La méthode sleep peut être interrompue par tout autre thread au cours de son exécution. par conséquent, il peut lancer l'InterruptedExecption. Vous devez veiller à ce que l'exception soit gérée par le bloc try / catch ou par le mot clé Throws, sinon cela entraînera une erreur de compilation. La méthode sleep maintient le verrou sur l'objet actuel dans l'exécution et ne permet à aucun autre objet de s'exécuter jusqu'à ce qu'il ait terminé son exécution.

Définition de la méthode d'attente

Wait est la méthode définie dans la classe Object . La méthode wait est utilisée lorsque plusieurs tâches (threads) luttent pour la même ressource, une à la fois. La méthode wait, lorsqu'elle est appelée, libère le verrou sur l'objet qui a appelé la méthode wait. Et donnez la possibilité à un autre objet de s'exécuter jusqu'à ce qu'une méthode de notification soit appelée, ce qui permet de rétablir le verrouillage de l'objet libéré par la méthode wait. La méthode wait a la forme suivante.

 attendre(); attendre (longue milliseconde); wait (long milliseconde, int nanoseconde); 

Comme dans les trois formes ci-dessus de la méthode wait, la première méthode n'a pas de paramètre time, cela signifie que l'exécution de la méthode wait continuera jusqu'à ce que la méthode notify ou que la méthode notifyAll ne soit pas invoquée. Les deux méthodes restantes ont des paramètres de temps. Ainsi, ils s'exécuteront jusqu'à l'expiration du délai ou jusqu'à ce que la méthode notify ou noitfyAll soit invoquée avant l'expiration du délai. La méthode wait peut générer des exceptions. IllegalArgumentException, si l'argument time transmis est négatif. IllegalMonitorStateException, si le thread actuel n'utilise pas la ressource. InterruptedException, si la méthode wait est interrompue.

Principales différences entre les méthodes veille et attente en Java

  1. Le point principal qui distingue la méthode veille et attente est que la méthode veille maintient le verrou sur l'objet jusqu'à ce qu'il soit interrompu ou que son temps expire. Cependant, la méthode wait libère le verrou sur l'objet qui l'invoque et permet aux autres objets de s'exécuter.
  2. La méthode sleep est définie dans la classe Thread alors que la méthode wait est définie dans la classe Object .
  3. La méthode de veille n'a pas besoin d'être appelée depuis un contexte synchronisé. Mais la méthode d'attente doit être appelée à partir de synchronisé.
  4. La méthode de veille est réveillée si son temps est expiré ou s'il est interrompu par l'autre thread. La méthode d'attente est réveillée
    lorsque la méthode notify ou notify All est appelée.
  5. La méthode sleep est une méthode statique alors que la méthode wait n'est pas une méthode statique .
  6. La méthode sleep est exécutée sur le thread actuel, tandis que la méthode wait est exécutée sur l'objet qui l'appelle.
  7. L'exception levée par la méthode sleep est InterruptedException, tandis que les exceptions renvoyées par la méthode wait sont IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Conclusion:

Lorsque plusieurs threads veulent utiliser la même ressource une par une, la méthode wait doit être utilisée. Lorsqu'un thread ne souhaite effectuer aucune tâche, la méthode de veille doit être utilisée.

Top