-
Executors백기선(인프런 강의)/더 자바, Java 8 2020. 7. 16. 13:08반응형
고수준 (High-Level) Concurrency 프로그래밍
- 쓰레드를 만들고 관리하는 작업을 애플리케이션에서 분리.
- 그런 기능을 Executors에게 위임.
Executors가 하는 일
- 쓰레드 만들기: 애플리케이션이 사용할 쓰레드 풀을 만들어 관리한다.
- 쓰레드 관리: 쓰레드 생명 주기를 관리한다.
- 작업 처리 및 실행: 쓰레드로 실행할 작업을 제공할 수 있는 API를 제공한다.
주요 인터페이스
Executor
- execute(Runnable)
ExecutorService
- Executor 상속 받은 인터페이스로, Callable도 실행할 수 있으며, Executor를 종료 시키거나, 여러 Callable을 동시에 실행하는 등의 기능을 제공한다.
ScheduledExecutorService
- ExecutorService를 상속 받은 인터페이스로 특정 시간 이후에 또는 주기적으로 작업을 실행할 수 있다.
예제
public class App { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.submit(() -> { System.out.println("Thread " + Thread.currentThread().getName()); }); executorService.shutdown(); executorService.shutdownNow(); // 당장 종료 } }
public class App { public static void main(String[] args) { ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); // 3초 딜레이후 실행 scheduledExecutorService.schedule(getRunable("Hello"), 3, TimeUnit.SECONDS); // 반복 실행 // 아래 shutdown 지우고 실행 scheduledExecutorService.scheduleAtFixedRate(getRunable("Repeat"), 1, 2, TimeUnit.SECONDS); scheduledExecutorService.shutdown(); } private static Runnable getRunable(String message) { return () -> System.out.println(message + " " + Thread.currentThread().getName()); } }
다중 쓰레드
public class App { public static void main(String[] args) { // 쓰레드를 2개 생성 ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.submit(getRunable("Hello")); executorService.submit(getRunable("JinSeok")); executorService.submit(getRunable("The")); executorService.submit(getRunable("Java")); executorService.submit(getRunable("Thread")); executorService.shutdown(); } private static Runnable getRunable(String message) { return () -> System.out.println(message + Thread.currentThread().getName()); } }
위의 코드를 그림으로 표현하면 아래와 같다.
쓰레드를 Pool을 2개 사용하여 많은 작업을 할 경우 Blocking Queue에 담아 차례로 실행을 진행한다.
참고
반응형'백기선(인프런 강의) > 더 자바, Java 8' 카테고리의 다른 글
CompletableFuture (0) 2020.07.22 Callable과 Future (0) 2020.07.20 자바 Concurrent 프로그래밍 소개 (0) 2020.07.16 Date와 Time API (0) 2020.07.12 Optional API (0) 2020.07.12