스레드 풀 스레드의 블로킹 방식 작업 완료 통보

ExecutorService의 .submit() 메소드는 스레드 작업으로 준 Runnable 혹은 Callable 작업을 스레드 풀의 작업 큐에 저장하고 즉시 Future 객체를 반환한다.

Future 객체

Future 객체는 단순히 작업 결과를 받는 것이 아니라 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는데 사용된다. Future를 지연 완료(pending completion) 객체라고도 한다.

Future.get()

Future의 .get() 메소드를 호출하면 스레드가 작업을 완료할 때까지 블로킹되었다가 작업을 완료하면 처리 결과를 리턴한다. 이것이 블로킹을 사용하는 작업 완료 통보 방식이다.

Future.get()의 리턴값

다른 스레드에게 Future.get() 위임

new Thread(new Runnable() {
  @Override
  public void run() {
    try {
      future.get();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}).start();

스레드 풀 내의 다른 스레드에게 Future.get() 위임

executorService.submit(new Runnable() {
  @Override
  public void run() {
    try {
      future.get();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
});