5-ExecutorService & CountDownLatch

ExecutorService

  • 비동기 작업을 할때 쓰레드관리가 복잡한 과정임
    • ExecutorService가 복잡한 쓰레드관리를 단순화 시켜줌
  • 하나이상의 비동기 작업을 과정을 추적하기 위한 Future를 생성하는 메서드와 종료관리 메서드를 제공
  • Excutor를 상속받았기에 execute메서드와 ExecutorService자체에서 제공하는 submit 메서드, shutdown, shutdownNow, awaitTermination등의 메서드가 있음

Method

execute(Runnable command)

  • Runnable한 인자를 받아 미래에 실행시킴
  • void를 리턴함

submit(Runnable command)

  • execute와 마찬가지고러 Runnable한 인자와 Callable한 인자를 받아 미래에 실행시킴
  • 인자의 수행 결과를 Future로 감싸서 리턴함

awaitTermination(long timeout, TimeUnit unit)

  • 시간을 인자로 받으며, 모든 작업이 끝나거나, 시간 초과되거나, 인터럽트가 발생할때까지 쓰레드를 block시킴

shutdown()

  • 이전에 제출된 작업은 유지하지만, 새로운 작업은 받지않음
  • 제출된 작업이 완료되면 종료함

shutdownNow()

  • 실행중인 작업과 대기중인 작업 모두 중지하고, 실행 대기중인 작업을 반환함

CountDownlatch

  • 하나 이상의 스레드가 다른 쓰레드의 작업이 완료될때 까지 기다려주는 보조 동기화 장치
  • 생성자로 count를 받으며, count가 0이 되면 await를 즉시 리턴함

메서드

CountDownLatch(int count)

  • 생성자로 count를 받고, await를 호출하면 해당 count가 0이 될때까지 스레드를 wait함

countDown()

  • count를 1감소시킴, 0이되면 await중인 스레드의 release함

getCount()

  • 현재 count를 가져옴

await()

  • 스레드가 인터럽트 되지 않는 한, count가 0이 될때까지 현재 쓰레드를 wait함

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html

Hugo로 만듦
JimmyStack 테마 사용 중