작업실행을 위한 스레드풀 관련하여 Executor 프레임워크가 제공된다.
public interface Executor {
void execute(Runnable command);
}
- 직접 스레드를 생성하는 것보다 Executor를 사용하는 것이 추상화 되어있고 사용하기 좋다
- 작업 등록 / 작업 실행을 분리하는 표준적인 인터페이스
실행 정책
- 어느 스레드에서 실행할 것인지
- 작업을 어떤 순서로 실행할 것인지
- 동시에 몇 개의 작업을 병렬로 실행할 것인지
- 최대 몇개까지 작업큐에서 대기할 것인지
- 작업 실행 전/후의 동작 정의
- 등등..
기본 정의된 스레드풀
- 자주 사용하는 ThreadPoolExecutor 클래스를 생성하는 일종의 팩토리 메서드
- 매번 스레드를 생성하지 않고 이전에 만들어진 스레드를 재사용
newFixedThreadPool
작업이 등록되면 작업스레드를 생성. 최대 작업스레드 개수가 정해져 있으며 생성 후 스레드 수 유지
newCachedThreadPool
처리할 작업이 많아지면 필요한 만큼 스레드를 생성함. 개수에 제한을 두지 않음. 쉬는 스레드가 많아지면 스레드 종료
newSingleThreadExcuter
단일 스레드로 동작하는 Executor. 순차적으로 처리