Executors 1
java ·고수준의 Concurrent 프로그래밍
쓰레드를 생성 및 관리 작업을 애플리케이션에서 분리
쓰레드 생성 및 관리 작업들을 Executors에게 위임
Executors가 하는 일
쓰레드 생성: 애플리케이션이 사용할 쓰레드 풀을 만든다
쓰레드 관리: 쓰레드 생명주기를 관리한다
작업 처리 및 실행: 쓰레드로 실행할 작업을 제공할 수 있는 API를 제공한다
Excutors 관련 api 설명
Executor
제출된 Runnable 작업을 실행한다.
ExecutorService
스레드 종료와 하나 이상의 Future를 생성 관리하는 Excutor다
ScheduledExecutorService
작업을 지연시키거나 주기적으로 실행시킬수 있는 ExecutorService다
사용법
ExecutorService
Executors.newSingleThreadExecutor()
단일스레드를 사용하는 ExecutorService를 생성한다 .
ExecutorService.submit(Callable 또는 Runnable) 또는 ExecutorService.execute(Runnable command)
스레드 작업을 실행한다. Callable은 작업 결과를 리턴하는 Runnable이라 보면 된다
ExecutorService.shutdown()
greadful shutdown으로 스레드 작업이 끝난뒤 ExecutorsService를 종료한다.
ExecutorService.shutdownNow()
스레드 작업 완료 여부에 상관없이 ExecutorsService를 바로 종료한다.
예제
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(getRunnable("Hello "));
//종료를 하지않으면 대기상태가 ExecutorService의 대기상태가 지속되므로, 종료를 명시해야된다
//graceful shutdown, 스레드가 하던일을 마치고 종료
executorService.shutdown();
//바로 종료
// executorService.shutdownNow();
ScheduledExecutorService
Executors.newSingleThreadScheduledExecutor()
단일스레드를 사용하는 ScheduledExecutorService를 생성한다
ScheduledExecutorService.schedule(Runnable command, long delay, TimeUnit unit)
unit 단위에 delay 만큼 지연후 명령을 실행한다.
ScheduledExecutorService.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
unit 단위에 initalDelay 만큼 지연후 unit 단위에 period 마다 작업을 실행한다.
예제
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
// 3초뒤에 실행
scheduledExecutorService.schedule(getRunnable("schedule "), 3, TimeUnit.SECONDS);
// 3초뒤에 실행후 2초마다 실행
scheduledExecutorService.scheduleAtFixedRate(getRunnable("rateSchedule "), 3, 2, TimeUnit.SECONDS);
// 6초후에 종료
scheduledExecutorService.schedule(scheduledExecutorService::shutdown, 6, TimeUnit.SECONDS);
예제는 이곳 에서 확인할 수 있다.