Java Adv 24 - ExecutorService

ExecutorService

image image

ExecutorService를 사용하여 여러 작업을 비동기로 실행하고, 스레드 풀을 안전하게 종료(shutdown)하는 과정을 보여줍니다. 특히, 작업이 끝나지 않거나 대기 중인 작업이 있을 경우 이를 강제로 종료하는 로직이다.

  • Executors.newFixedThreadPool(2)는 최대 2개의 스레드를 유지하는 고정 크기의 스레드 풀을 생성한다.
  • 동시에 2개의 작업만 실행되며, 초과하는 작업은 내부 큐에 대기한다.

image image image image

corePoolsize 2개 maximumPoolSize도 4개 총 6개를 초과하면 task 7개부터 RejectedException이 발생한다. 큐에도 작업이 다차면 이때 maximum(초과 스레드)까지 늘리게 된다. 초과 스레드는 긴급한 상황에서 쓰이고 긴급한 상황이 끝나면 기다리다가 긴급한 상황이 종료되면 스레드를 제거해서 정상적으로 돌아온다.

image

  • Executors에는 초과 스레드인 3을 만든다.
  • 작업을 처리하기 위해 스레드를 하나 생성했기 때문에 작업을 큐에 넣을 필요 없이, 해당 스레드가 바로 작업을 처리한다. 따라서 task5가 task3, task4 보다 먼저 처리된다.

Reference

김영한님의 자바 강의

https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html



© 2022. by taewoo

Powered by taewoo