Qu'est-ce que Wait and Notify en Java?



Wait et Notify en Java sont les deux dernières méthodes qui permettent aux threads de communiquer entre eux. Cet article vous aidera avec les détails

La fonction Java permet l'exécution simultanée de deux ou plusieurs parties d'un programme. Chaque partie est un fil. Ces fils doivent souvent coordonner leurs actions. Cela se fait à l'aide de quelques méthodes finales telles que Attendre et Notifier en Java. Cet article vous aidera à comprendre ces méthodes en détail.

J'aborderai les sujets dans l'ordre suivant:





Commençons!

Qu'est-ce que la synchronisation des threads?

Les programmes multithreads peuvent régulièrement arriver à une situation où plusieurs tenter d'accéder à la même ressource qui produit des résultats frauduleux et surprenants. Parfois, plusieurs threads peuvent essayer d'accéder à une ressource partagée, vous devez vous assurer que cette ressource ne sera utilisée que par un thread à la fois. Cela peut être fait en utilisant Synchronisation en Java.



Parlons maintenant du sondage. L'interrogation est un processus qui consiste à tester une condition à plusieurs reprises jusqu'à ce qu'elle soit vraie. Cette méthode est mise en œuvre à l'aide de pour vérifier si une condition particulière est vraie ou non. Vous pouvez utiliser cette méthode pour les threads mais cette méthode gaspille beaucoup de cycles CPU et aussi rend le processus de mise en œuvre très inefficace. Pour éviter ce genre de bogues, des méthodes comme Wait et Notify en Java sont introduites.

Que sont les méthodes Wait () et Notify ()?

Pour résoudre le problème du multithreading, des méthodes telles que Wait et Notify in sont utilisés. La classe Object utilise ces trois méthodes finales qui permettent aux threads de communiquer sur l'état verrouillé d'une ressource. Ils sont également appelés les blocs gardés.

déclarer un tableau d'objets en java

Attendez()

Cette méthode oblige le thread à attendre qu'un autre thread appelle les méthodes notify () et notifyAll () pour cet objet. Cette méthode Wait () indique au thread appelant de lâcher un verrou et de se mettre en veille jusqu'à ce qu'un autre thread entre dans le même moniteur et appelle à notify (). Cette méthode libère le verrou avant d'attendre et réacquiert le verrou avant de revenir de la méthode wait ().



La méthode Wait () est étroitement intégrée au verrou de synchronisation. Cela se fait en utilisant une fonctionnalité non disponible directement à partir du mécanisme de synchronisation.

Syntaxe:

synchronized (lockObject) {while (! condition) {lockObject.wait ()} // entreprend l'action ici}

Le thread actuel doit posséder le moniteur de l’objet. Il doit être appelé à partir de la méthode synchronisée uniquement, sinon il lèvera une exception.

Notifier ()

Cette méthode est utilisée pour notifier le dont il a besoin pour fonctionner. Il réveille un fil qui a appelé le attendez() méthode sur le même objet.

Notez que l'appel notifier () n'abandonne finalement pas un verrou. Il indique à un thread en attente qu'il peut se réveiller. Cependant, le verrouillage n’est pas réellement abandonné tant que le bloc synchronisé du notifiant n’est pas terminé. Maintenant dis, si tu appelles notifier () sur une ressource mais le notifiant doit encore effectuer des actions pendant 10 secondes dans son bloc synchronisé, le thread qui attendait devra attendre au moins 10 secondes supplémentaires pour que le notifiant libère le verrou sur l'objet, même si notifier () avait été appelé.

Syntaxe:

synchronized (lockObject) {// Establishment_the_condition lockObject.notify () // tout code supplémentaire si nécessaire}

NotifyAll ()

Cette méthode est utilisée pour réveiller tous les threads qui avaient appelé wait () sur le même objet. Le thread de priorité la plus élevée sera d'abord exécuté dans la plupart des cas, même s'il n'est pas garanti. D'autres choses sont les mêmes que la méthode notify ().

Pourquoi et comment utiliser Wait () et Notify () en Java?

Vous devez utiliser Attendre et notifier dans parce qu'ils sont liés au verrou et que l'objet a un verrou. Même si attendre et notifier en Java est un concept assez fondamental, ils sont définis dans le classe d'objets . Étonnamment, il n’est pas si simple d’écrire le code en utilisant la fonction d’attente et de notification. Vous pouvez tester cela en écrivant du code pour résoudre le problème producteur-consommateur en utilisant wait and notify. Exemple de consommateur producteur - Attendez et notifiez dans Java-EdurekaIci, j'ai un partage Queue etdeux filsappelé Producteur et Consommateur . Producteur thread met le numéro dans une file d'attente partagée et Consommateur thread consomme les nombres du compartiment partagé.

La condition est qu'une fois qu'un article est produit, le fil consommateur doit être notifié et de même, après que le fil producteur de consommation doit être notifié. Cet inter-threadla communicationest réalisé en utilisant l'attente et la notification en Java.

Remarque : W.ait et nonLes méthodes tify sont définies dans la classe d'objets, et ils doivent être appelés à l'intérieur d'un bloc synchronisé.

Exemple

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} classe Thread2 étend Thread1 {int total @Override public void run () {synchronized (this) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Notez que dans l'exemple ci-dessus, un objet de Thread2, c'est-à-dire b, est synchronisé. Ce b termine le calcul avant que le thread principal ne délivre sa valeur totale.

Production:

Cela nous amène à la fin de cet article où nous avons appris le sur le Wait and Notify en Java.J'espère que le contenu mentionné ci-dessus s'est avéré utile pour améliorer votre connaissance. Continuez à lire, continuez à explorer!

Consultez également par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi que divers comme Hibernate & Spring.