[java] 스레드 간의 통신을 위한 방법은?

자바에서는 스레드 간의 통신을 위한 몇 가지 방법을 제공합니다. 가장 일반적인 방법 중 하나는 공유 변수를 사용하는 것입니다. 스레드 간에 공유되는 변수를 사용하여 데이터를 주고받을 수 있습니다.

예를 들어, 다음과 같이 공유 변수를 선언하고 스레드에서 값을 설정하고 가져올 수 있습니다.

class SharedData {
  private int value;

  public synchronized int getValue() {
    return value;
  }

  public synchronized void setValue(int newValue) {
    value = newValue;
  }
}

class MyThread extends Thread {
  private SharedData sharedData;

  public MyThread(SharedData sharedData) {
    this.sharedData = sharedData;
  }

  public void run() {
    // 값을 설정
    sharedData.setValue(10);

    // 값을 가져옴
    int value = sharedData.getValue();
    System.out.println("Value: " + value);
  }
}

public class Main {
  public static void main(String[] args) {
    SharedData sharedData = new SharedData();
    MyThread thread = new MyThread(sharedData);
    thread.start();
  }
}

위의 코드에서 SharedData 클래스는 공유 변수 value를 가지며, getValue()setValue() 메서드를 사용하여 해당 변수의 값을 스레드끼리 주고받습니다. MyThread 클래스는 SharedData 인스턴스를 생성자로 받아 해당 변수를 설정하고 가져오는 간단한 예제입니다.

이 외에도 자바에서는 wait(), notify(), notifyAll() 메서드를 사용하여 스레드 간의 통신을 할 수 있습니다. 이 메서드들은 스레드의 대기 및 통지 기능을 제공하므로, 특정 조건이 충족되지 않을 때 스레드를 대기시키고 다른 스레드에게 통지하여 작업을 진행할 수 있도록 합니다.

자바에서는 스레드 간의 통신을 위해 다양한 방법을 제공하므로, 개발하고자 하는 시나리오에 가장 적합한 방법을 선택하면 됩니다. 이를테면, 데이터의 동기화가 필요한 경우에는 synchronized 키워드를 사용하여 메서드나 블록을 동기화하는 방법을 선택할 수 있습니다.

더 자세한 내용은 Java 공식 문서를 참고하시기 바랍니다.