Le sommeil et l'attente sont deux méthodes utilisées pour le multithreading en Java. La méthode de sommeil appartient à la classe de threads tandis que la méthode d'attente provient de la classe d'objets. Le différence clé entre le sommeil et l'attente en java est que, le Le sommeil est utilisé pour suspendre l'exécution du thread actuel pour le nombre spécifié de millisecondes tandis que la méthode d'attente est utilisée pour faire attendre le thread actuel qu'un autre thread invoque la méthode Notify ou Notifyall pour l'objet.
Un thread est la plus petite unité de traitement dans le système d'exploitation. C'est un seul flux de contrôle séquentiel dans un programme. Les fils sont légers. Multithreading est le mécanisme d'exécution de plusieurs threads en même temps. Les langages de programmation tels que Java prennent en charge le multithreading. Le multithreading a des avantages car il permet d'exécuter plusieurs threads simultanément et 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.
1. Aperçu et différence clé
2. Qu'est-ce que le sommeil à Java
3. Qu'est-ce que l'attente à Java
4. Similitudes entre le sommeil et attendre à Java
5. Comparaison côte à côte - sommeil vs attendre en java sous forme tabulaire
6. Résumé
Il existe plusieurs processus exécutés dans un système d'exploitation. Un processus est un programme en exécution. Chaque processus peut avoir plusieurs threads, et il y a une commutation de contexte se produisant entre ces threads. En Java, il y a deux façons de créer un fil. C'est-à-dire en étendant la classe de thread ou en implémentant l'interface runnable. La classe de thread a des constructeurs et des méthodes pour créer et effectuer des opérations sur un fil. La classe de thread étend la classe d'objets et implémente l'interface Runnable. L'interface Runnable doit être implémentée par n'importe quelle classe dont les instances sont destinées à être exécutées par un thread. Lorsque le thread s'exécute, le code qui devrait s'exécuter est écrit dans la méthode d'exécution. Le thread qui devrait s'exécuter est sélectionné par le planificateur de thread. Un seul thread s'exécute en un seul processus.
Un fil passe par plusieurs phases. Après avoir créé un objet de classe de thread, le programmeur peut invoquer la méthode de démarrage. Avant d'invoquer cette méthode, le fil serait dans le nouvel état. Le planificateur de thread sélectionne un thread à exécuter. Si le thread n'est pas encore sélectionné par le planificateur de thread mais si la méthode de démarrage est invoquée, le thread est dans un état de course. Une fois que le planificateur de thread sélectionne le thread à exécuter, il se transforme en fonction de l'état en cours d'exécution. Si le fil est vivant mais n'est pas actuellement éligible à l'exécution, il est à l'état non runable ou bloqué. Après la fin de la méthode d'exécution, le fil va à l'état terminé. Ce sont les principales phases du cycle de vie du fil.
Il existe différentes méthodes disponibles dans la classe de threads pour effectuer différentes tâches. La méthode de sommeil est utilisée pour dormir la méthode pendant une durée spécifique. La syntaxe pour la méthode du sommeil est le sommeil public du sommeil (de longues millisecondes) lance InterruptedException. Il provoque le thread à exécuter actuellement à arrêter l'exécution temporaire pour un nombre spécifié de millisecondes. Si un autre thread interrompt le thread actuel, l'état interrompu du thread actuel est effacé lorsque cette exception est lancée.
Figure 01: Programme Java avec méthode de sommeil
Selon le programme ci-dessus, la méthode d'exécution contient du code qui doit être exécuté. Dans le programme principal, deux objets de l'ExampleThread1 sont créés, et les méthodes de démarrage sont invoquées sur eux. Qui permettra d'exécuter le code à l'intérieur de la méthode d'exécution. Un seul thread s'exécute à la fois. Avec le fil. sommeil (1000); permettra au premier thread de terminer l'exécution pendant 1000 millisecondes. Lorsqu'un fil dort, le planificateur de fil ramasse l'autre fil.
Plusieurs threads peuvent accéder à une ressource partagée. Il peut entraîner une sortie incorrecte. La synchronisation du thread peut être utilisée pour créer un seul thread pour accéder à la ressource partagée. Assumer une situation comme suit. Si, il y a deux threads en tant que T1 et T2, T1 commence à enregistrer les valeurs dans un fichier texte appelé text1.SMS. Ces valeurs seront utilisées pour un autre calcul lorsque T1 revient. Si T2 commence avant le retour de T1, T2 peut modifier les valeurs enregistrées par T1. Cela peut provoquer une mauvaise sortie T1. À l'aide de la synchronisation, lorsque T1 commence à utiliser le texte1.fichier txt, ce fichier peut être verrouillé, il n'est donc accessible que par T1. Le T2 ne peut pas le modifier jusqu'à ce que T1 libère le verrou pour accéder à ce fichier texte. Une fois la tâche terminée, le T1 peut libérer le verrouillage. Le verrou est également connu sous le nom de moniteur.
La synchronisation des threads peut être obtenue par 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 interrompu en cours d'exécution dans sa section critique, et un autre thread est autorisé à entrer dans la même section critique pour être exécutée. Il est implémenté en utilisant des méthodes d'attente, notifier et notifier. Ils appartiennent à la classe d'objets. La méthode d'attente est utilisée pour permettre au thread actuel de libérer le verrou et d'attendre qu'un autre thread invoque la méthode Notify ou Notifyall pour l'objet. La méthode de notification est utilisée pour réveiller un seul fil qui attend le verrouillage. L'avoir réveille tous les fils qui attendent sur le verrouillage.
Figure 02: Classe de calculatrice
Figure 03: Méthode principale
La classe de calculatrice étend le fil. Le bloc synchronisé est à l'intérieur de la méthode de course. La méthode pour la boucle et la notification est à l'intérieur du bloc synchronisé. À l'intérieur de 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 fil donne une notification. Lors de l'exécution du programme, la méthode principale attend que l'exécution entière de la méthode d'exécution et attend la méthode de notification. Une fois la méthode de notification appelée, la méthode principale arrête d'attendre et commence à exécuter le reste du code. Main attend que le thread de calculatrice soit terminé. Enfin, le résultat de la somme est imprimé.
S'il n'y a pas de bloc synchronisé et que si la méthode principale a un code comme ci-dessous, il donnera la sortie comme zéro car elle n'attendra pas que l'autre fil termine.
Calculatrice t1 = nouvelle calculatrice ();
T1. commencer ();
Système.dehors.println (T1.somme);
sommeil vs attendre en java | |
La méthode de sommeil fait suspendre l'exécution du thread actuel pour le nombre spécifié de millisecondes, sous réserve de la précision et de la précision des minuteries et des planificateurs du système. | La méthode d'attente fait attendre le thread actuel qu'un autre thread invoque la méthode notify ou notifyall pour l'objet. |
Association avec Lock | |
La méthode de sommeil ne libère pas le verrou sur un objet pendant la synchronisation. | La méthode d'attente libère le verrouillage pendant la synchronisation. |
Méthode d'exécution | |
La méthode de sommeil est exécutée sur le thread actuel. | La méthode d'attente est appelée sur l'objet. |
Classe associée | |
Le sommeil est une méthode de classe de fil. | L'attente est une méthode de classe d'objets. |
Achèvement | |
Le processus de sommeil est terminé une fois la durée spécifiée. | La méthode d'attente est interrompue en appelant les méthodes Notify ou Notifyall. |
Il y a plusieurs processus exécutés sur le système d'exploitation. Chaque processus peut avoir plusieurs threads. Un thread est la plus petite unité de traitement dans un système d'exploitation. La langue de programme Java prend en charge le multithreading. Il permet d'exécuter plusieurs threads simultanément. Le sommeil et l'attente sont deux méthodes qui peuvent être utilisées lors de l'implémentation. La différence entre le sommeil et l'attente en Java est que le sommeil est utilisé pour suspendre l'exécution du thread actuel pour le nombre spécifié de millisecondes tandis que la méthode d'attente est utilisée pour faire attendre le thread actuel qu'un autre thread invoque le notifier ou le notifier Méthode pour l'objet.
1.«Communication inter-thread en Java - Javatpoint.". Javatpoint. Disponible ici
2. Inter-thread Communication dans Java Multithreading | Tutoriel de base Java | StudyTonight. Disponible ici