Interthread-Kommunikation

Wenn Sie sich der Interprozesskommunikation bewusst sind, können Sie die Interthread-Kommunikation leicht verstehen. Die Interthread-Kommunikation ist wichtig, wenn Sie eine Anwendung entwickeln, in der zwei oder mehr Threads Informationen austauschen.

Es gibt drei einfache Methoden und einen kleinen Trick, der die Thread-Kommunikation ermöglicht. Alle drei Methoden sind unten aufgeführt -

Sr.Nr. Methode & Beschreibung
1

public void wait()

Bewirkt, dass der aktuelle Thread wartet, bis ein anderer Thread notify () aufruft.

2

public void notify()

Weckt einen einzelnen Thread auf, der auf dem Monitor dieses Objekts wartet.

3

public void notifyAll()

Aktiviert alle Threads, die wait () für dasselbe Objekt aufgerufen haben.

Diese Methoden wurden implementiert als finalMethoden in Object, sodass sie in allen Klassen verfügbar sind. Alle drei Methoden können nur innerhalb von a aufgerufen werdensynchronized Kontext.

Beispiel

Dieses Beispiel zeigt, wie zwei Threads mit kommunizieren können wait() und notify()Methode. Mit demselben Konzept können Sie ein komplexes System erstellen.

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);
   }
}

Wenn das obige Programm eingehalten und ausgeführt wird, führt es zu folgendem Ergebnis:

Ausgabe

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

Das obige Beispiel wurde aus [https://stackoverflow.com/questions/2170520/inter-thread-communication-in-java] übernommen und anschließend geändert.