Skip to content

Executors

Jeonghyun Kang edited this page Jun 5, 2022 · 1 revision

Excutors가 하는 일

  • 쓰레드 만들기: 애플리케이션이 사용할 쓰레드 풀을 만들어 관리한다.
  • 쓰레드 관리: 쓰레드 생명 주기를 관리한다.
  • 작업 처리 및 실행: 쓰레드로 실행할 작업을 제공할 수 있는 API를 제공한다.

submit

ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(() -> {
    System.out.println("Thread " + Thread.currentThread().getName());
});

// Thread pool-1-thread-1

execute

ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
    @Override
    public void run() {
        System.out.println("Thread " + Thread.currentThread().getName());
    }
});

// Thread pool-1-thread-1

shutdown

executorService.shutdown();      // 처리중인 작업 기다렸다가 종료
executorService.shutdownNow();   // 강제 종료

Runnable

private Runnable getRunnable(String message) {
    return () -> System.out.println(message + Thread.currentThread().getName());
}

FixedThreadPool

ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit(getRunnable("FixedThreadPool_1"));
executorService.submit(getRunnable("FixedThreadPool_2"));
executorService.submit(getRunnable("FixedThreadPool_3"));
executorService.submit(getRunnable("FixedThreadPool_4"));
executorService.submit(getRunnable("FixedThreadPool_5"));

result

FixedThreadPool_2pool-1-thread-2
FixedThreadPool_1pool-1-thread-1
FixedThreadPool_3pool-1-thread-2
FixedThreadPool_5pool-1-thread-2
FixedThreadPool_4pool-1-thread-1

SingleThreadScheduledExecutor

ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.schedule(getRunnable("SingleThreadScheduledExecutor_1"), 3, TimeUnit.SECONDS);
executorService.scheduleWithFixedDelay(getRunnable("SingleThreadScheduledExecutor_2"), 1, 2, TimeUnit.SECONDS);

result

SingleThreadScheduledExecutor_2pool-1-thread-1
SingleThreadScheduledExecutor_1pool-1-thread-1
SingleThreadScheduledExecutor_2pool-1-thread-1
...
...
...