1. ExecutorService

  1. Executor 상속받은 Interface로, Callable도 실행할 수 있으며, Executor를 종료시키거나, 여러 Callable을 동시에 실행하는 등의 기능을 제공함
  2. Runnable은 Return값이 없음, Callable은 특정 Type의 Object를 Return할 수 있음
    1. public interface Runnable { public abstract void run(); }
    2. public interface Callable<V> { V call() throws Exeption; }
  3. Thread 사용 시 실질적으로 사용하는 Interface임
  4. Executors Class의 Stataic Method를 활용해 구현하여 사용함

2. Executors

  1. Thread를 만들고 관리하는 것을 고수준의 API Executors에게 위임함
  2. Runnable만 개발자가 만들고 생성, 종료, 없애기 작업들은 Executors가 해줌
  3. Interface는 크게 Executor와 ExecutorService가 있지만, 실질적으로 ExecutorSerivce를 사용함
  4. 작업만 소스코드로 작성하면됨
  5. Executor, ExecutorService, ScheduledExecutorService, ThraedFactory 등을 정적 Factory Method를 지원해주는 Class임

2-1. Excutors의 역할

  1. Thread add : Application이 사용할 Thread Pool을 만들어 관리함
  2. Thread 관리 : Thread 생명 주기를 관리함
  3. 작업 처리 및 실행 : Thread로 실행할 작업을 제공할 수 있는 API를 제공함

3. Single Thread

  1. ExecutorService Interface와 Executors Class의 Static method를 이용해 ExecutorService를 구현하여 사용함
  2. 사용종료 후에는 종료 명령어를 이용해 종료함, 종료를 하지 않으면 다음 작업이 들어 올때까지 무한 대기를 함
  3. ex)
    1. 구현체 생성Executors.newSingleThreadExecutor()
      1. Executors Class의 Static Method를 활용하여 ExecutorSerice 구현체를 SingleThread 형태로 Return해줌
    2. 작업제출submit()
      1. Thread를 활용할 작업을 제출함(해당 Thread가 대기 중인 경우 제출한 작업을 처리함)
    3. 작업종료shutdown()
      1. 진행중인 작업을 마치고 Thread를 종료함(종료를 해줘야함, 안그러면 종료하지 않고 무한 대기를 하기 때문임)
    4. 즉시종료shutdownNow()
      1. 진행중인 작업을 마치지 않은 채로 종료할 수 있음(즉시종료)