Différence entre dormir et attendre en Java

Différence clé - sommeil vs attente Java
 

Sleep et wait sont deux méthodes utilisées pour le multithreading en Java. La méthode sleep appartient à la classe Thread alors que la méthode wait provient de la classe Object. le différence clé entre dormir et attendre en Java est que, la sleep est utilisé pour suspendre l'exécution du thread actuel pendant le nombre de millisecondes spécifié, tandis que la méthode wait est utilisée pour faire attendre le thread actuel jusqu'à ce qu'un autre thread appelle la méthode notify ou notifyAll pour l'objet..

Un thread est la plus petite unité de traitement du système d'exploitation. C'est un flux de contrôle séquentiel unique au sein d'un programme. Les fils sont légers. Le multithreading est le mécanisme permettant d'exécuter plusieurs threads en même temps. Les langages de programmation tels que Java prennent en charge le multithreading. Le multithreading présente des avantages car il permet d'exécuter plusieurs threads simultanément et que les threads sont indépendants les uns des autres. Il existe des méthodes en Java qui peuvent être utilisées pour le multithreading. Deux d'entre eux dorment et attendent.

CONTENU

1. Vue d'ensemble et différence clé
2. Qu'est-ce que dormir en Java?
3. Qu'est-ce que l'attente en Java
4. Similitudes entre dormir et attendre en Java
5. Comparaison côte à côte - sommeil vs attente en Java sous forme de tableau
6. Résumé

Qu'est-ce que dormir en Java??

Plusieurs processus s'exécutent dans un système d'exploitation. Un processus est un programme en cours d'exécution. Chaque processus peut avoir plusieurs threads et un changement de contexte se produit entre ces threads. En Java, il existe deux manières de créer un thread. C'est en étendant la classe de thread ou en implémentant l'interface Runnable. La classe Thread possède des constructeurs et des méthodes pour créer et effectuer des opérations sur un thread. La classe Thread étend la classe Object et implémente l'interface Runnable. L'interface Runnable doit être implémentée par toute classe dont les instances sont destinées à être exécutées par un thread. Lorsque le thread s'exécute, le code à exécuter est écrit dans la méthode run. Le thread qui doit être exécuté est sélectionné par le planificateur de thread. Un seul thread s'exécute dans un seul processus.

Un fil passe par plusieurs phases. Après avoir créé un objet de la classe Thread, le programmeur peut invoquer la méthode start. Avant d'appeler cette méthode, le thread est dit être dans le nouvel état. Le planificateur de threads sélectionne un thread à exécuter. Si le thread n'est pas encore sélectionné par le planificateur de thread mais que la méthode de démarrage est appelée, le thread est dans un état pouvant être exécuté. Une fois que le planificateur de thread a sélectionné le thread à exécuter, il passe à l'état d'exécution. Si le thread est actif mais n'est pas actuellement éligible pour s'exécuter, il est dans un état bloqué ou non exécutable. Une fois la méthode d'exécution terminée, le thread passe à l'état terminé. Ce sont les principales phases du cycle de vie du thread.

Il existe différentes méthodes disponibles dans la classe de thread pour effectuer différentes tâches. La méthode de mise en veille est utilisée pour mettre la méthode en veille pendant une durée déterminée. La syntaxe de la méthode sleep est la suivante: public void sleep (long milliseconds) lève InterruptedException. Cela provoque l'arrêt temporaire du thread en cours d'exécution pendant un nombre spécifié de millisecondes. Si un autre thread interrompt le thread en cours, le statut interrompu du thread en cours est effacé lorsque cette exception est levée..

Figure 01: Programme Java avec méthode sleep

Selon le programme ci-dessus, la méthode run contient du code à exécuter. Dans le programme principal, deux objets de ExampleThread1 sont créés et les méthodes de démarrage sont invoqués. Cela permettra d'exécuter le code dans la méthode run. Un seul thread s'exécute à la fois. Avec le fil. dormir (1000); permettra au premier thread de terminer l'exécution pendant 1000 millisecondes. Lorsqu'un thread est en veille, le planificateur de threads récupère l'autre thread.

Qu'est-ce que l'attente en Java?

Plusieurs threads peuvent accéder à une ressource partagée. Cela peut générer une sortie incorrecte. La synchronisation des threads peut être utilisée pour créer un seul thread pour accéder à la ressource partagée. Supposons une situation comme suit. Si, il existe deux threads comme t1 et t2, t1 commence à enregistrer les valeurs dans un fichier texte appelé Text1.txt. Ces valeurs seront utilisées pour un autre calcul lors du retour de t1. Si t2 démarre avant que t1 ne soit renvoyé, t2 peut modifier les valeurs enregistrées par t1. Cela peut entraîner que t1 fournisse une sortie incorrecte. Avec l'aide de la synchronisation, lorsque t1 commence à utiliser le fichier Text1.txt, ce fichier peut être verrouillé afin qu'il ne soit accessible que par t1. Le t2 ne peut pas le changer avant que t1 lâche le verrou pour accéder à ce fichier texte. Lorsque la tâche est terminée, le t1 peut libérer le verrou. La serrure est aussi appelée moniteur.

La synchronisation des threads peut être réalisée par une communication inter-thread. Une section critique est un segment de code qui accède aux ressources partagées. Dans la communication inter-thread, un thread est suspendu dans sa section critique et un autre thread est autorisé à entrer dans la même section critique à exécuter. Il est implémenté à l'aide des méthodes wait, notify et notifyAll. Ils appartiennent à la classe Object. La méthode wait est utilisée pour permettre au thread actuel de libérer le verrou et d'attendre qu'un autre thread appelle la méthode notify ou notifyAll pour l'objet. La méthode notify est utilisée pour réveiller un seul thread en attente du verrou. NotifyAll réveille tous les threads en attente sur le verrou.

Figure 02: Classe de calculatrice

Figure 03: Méthode principale

La classe Calculatrice étend le thread. Le bloc synchronisé est à l'intérieur de la méthode d'exécution. La méthode for loop et notify est à l'intérieur du bloc synchronisé. Dans la méthode principale, une instance d'un thread créé et la méthode de démarrage est appelée sur cette instance. La méthode principale attendra que le thread donne une notification. Lors de l'exécution du programme, la méthode principale attend l'exécution complète de la méthode d'exécution et attend la méthode de notification. Une fois que la méthode notify est appelée, la méthode principale cesse d’attendre et commence à exécuter le reste du code. Main attend que le thread de la calculatrice soit terminé. Enfin, le résultat de la somme est imprimé.

S'il n'y a pas de bloc synchronisé et si la méthode principale a un code comme ci-dessous, il donnera la sortie à zéro car il n'attend pas la fin de l'autre thread.

Calculatrice t1 = nouvelle calculatrice ();

 t1. début ();

System.out.println (t1.sum);

Quelle est la similitude entre dormir et attendre en Java?

  • Les méthodes veille et attente sont des méthodes pouvant être utilisées lors de la mise en œuvre du multithreading en Java.

Quelle est la différence entre dormir et attendre en Java?

dormir vs attendre en Java

La méthode sleep met le thread en cours en suspension d'exécution pendant le nombre de millisecondes spécifié, sous réserve de la précision et de l'exactitude des temporisateurs et des planificateurs du système.. La méthode wait fait que le thread en cours attend jusqu'à ce qu'un autre thread appelle la méthode notify ou notifyAll pour l'objet..
 Association avec Lock
La méthode sleep ne libère pas le verrou sur un objet lors de la synchronisation. La méthode wait libère le verrou pendant la synchronisation.
Mode d'exécution
La méthode sleep est exécutée sur le thread actuel. La méthode wait est appelée sur l'objet.
 Classe associée
Le sommeil est une méthode de la classe Thread. L'attente est une méthode de la classe Object.
Achèvement
Le processus de sommeil est terminé une fois le délai spécifié écoulé.. La méthode wait est interrompue en appelant les méthodes notify ou notifyAll.

Résumé - dormir vs attendre Java

Plusieurs processus s'exécutent sur le système d'exploitation. Chaque processus peut avoir plusieurs threads. Un thread est la plus petite unité de traitement d'un système d'exploitation. Le langage de programmation Java prend en charge le multithreading. Il permet d'exécuter plusieurs threads simultanément. Les méthodes veille et attente sont deux méthodes qui peuvent être utilisées lors de la mise en œuvre du multi-threading. La différence entre sleep et wait en Java réside dans le fait que le sommeil est utilisé pour suspendre l'exécution du thread actuel pendant le nombre de millisecondes spécifié, tandis que la méthode wait est utilisée pour faire attendre le thread actuel jusqu'à ce qu'un autre thread appelle l'invocation de notify ou notifyAll. méthode pour l'objet.

Référence:

1. «Communication inter-thread en Java - Javatpoint».. JavaTPoint. Disponible ici
2. Fil inter Communication en multithreading Java | Tutoriel Java de base | Studytonight. Disponible ici