스레드 간 통신

프로세스 간 통신을 알고 있다면 스레드 간 통신을 쉽게 이해할 수 있습니다. 스레드 간 통신은 두 개 이상의 스레드가 일부 정보를 교환하는 응용 프로그램을 개발할 때 중요합니다.

스레드 통신을 가능하게하는 세 가지 간단한 방법과 약간의 트릭이 있습니다. 세 가지 방법 모두 아래에 나열되어 있습니다.

Sr. 아니. 방법 및 설명
1

public void wait()

다른 스레드가 notify ()를 호출 할 때까지 현재 스레드가 대기하도록합니다.

2

public void notify()

이 개체의 모니터에서 대기중인 단일 스레드를 깨 웁니다.

public void notifyAll()

동일한 객체에서 wait ()를 호출 한 모든 스레드를 깨 웁니다.

이러한 방법은 다음과 같이 구현되었습니다. finalObject의 메서드를 사용하므로 모든 클래스에서 사용할 수 있습니다. 세 가지 메서드는 모두 내부에서만 호출 할 수 있습니다.synchronized 문맥.

이 예는 두 스레드가 wait()notify()방법. 동일한 개념을 사용하여 복잡한 시스템을 만들 수 있습니다.

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

위의 프로그램을 따라 실행하면 다음과 같은 결과가 나옵니다.

산출

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

위의 예는 [https://stackoverflow.com/questions/2170520/inter-thread-communication-in-java]에서 가져와 수정되었습니다.