Communication inter-thread

Si vous connaissez la communication interprocessus, il vous sera alors facile de comprendre la communication inter-processus. La communication entre les threads est importante lorsque vous développez une application dans laquelle deux ou plusieurs threads échangent des informations.

Il existe trois méthodes simples et une petite astuce qui rend la communication de thread possible. Les trois méthodes sont répertoriées ci-dessous -

N ° Sr. Méthode et description
1

public void wait()

Provoque l'attente du thread actuel jusqu'à ce qu'un autre thread appelle la notification ().

2

public void notify()

Réveille un thread unique en attente sur le moniteur de cet objet.

3

public void notifyAll()

Réveille tous les threads qui ont appelé wait () sur le même objet.

Ces méthodes ont été implémentées comme finalméthodes dans Object, elles sont donc disponibles dans toutes les classes. Les trois méthodes ne peuvent être appelées qu'à partir d'unsynchronized le contexte.

Exemple

Cet exemple montre comment deux threads peuvent communiquer en utilisant wait() et notify()méthode. Vous pouvez créer un système complexe en utilisant le même concept.

class Chat {
   boolean flag = false;

   public synchronized void Question(String msg) {

      if (flag) {
         
         try {
            wait();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
      System.out.println(msg);
      flag = true;
      notify();
   }

   public synchronized void Answer(String msg) {

      if (!flag) {
         
         try {
            wait();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
      System.out.println(msg);
      flag = false;
      notify();
   }
}

class T1 implements Runnable {
   Chat m;
   String[] s1 = { "Hi", "How are you ?", "I am also doing fine!" };

   public T1(Chat m1) {
      this.m = m1;
      new Thread(this, "Question").start();
   }

   public void run() {
   
      for (int i = 0; i < s1.length; i++) {
         m.Question(s1[i]);
      }
   }
}

class T2 implements Runnable {
   Chat m;
   String[] s2 = { "Hi", "I am good, what about you?", "Great!" };

   public T2(Chat m2) {
      this.m = m2;
      new Thread(this, "Answer").start();
   }

   public void run() {

      for (int i = 0; i < s2.length; i++) {
         m.Answer(s2[i]);
      }
   }
}

public class TestThread {

   public static void main(String[] args) {
      Chat m = new Chat();
      new T1(m);
      new T2(m);
   }
}

Lorsque le programme ci-dessus est respecté et exécuté, il produit le résultat suivant -

Production

Hi
Hi
How are you ?
I am good, what about you?
I am also doing fine!
Great!

L'exemple ci-dessus a été pris puis modifié à partir de [https://stackoverflow.com/questions/2170520/inter-thread-communication-in-java]