앞선 아티클에서 newCachedThreadPool( )로 생성한 스레드 풀에 대해서 살펴보았습니다. 이번에는 newFixedThreadPool(int nThreads)의 사용에 대해서 살펴보겠습니다.
멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 1
○ 스레드풀 생성 앞선 스레드풀 개념에서 설명했듯이, ExecutorService 인터페이스의 구현 객체는 Executors 클래스의 static 메서드를 이용해 생성하게 됩니다. 아래 두 가지 메서드 중 하나를 사용하
nozeroslope.tistory.com
newFixedThreadPool(int nThreads) 메서드로 생성된 스레드풀의 초기 스레드 개수는 역시 0개 입니다. 그리고 코어 스레드 수는 nThreads입니다. 만약 스레드의 개수보다 작업 개수가 많을 경우에는 새 스레드를 생성시키고 작업을 처리하게 됩니다. 이 때 최대 스레드 개수는 파라미터로 전달된 nThreads입니다.
참고로 이 스레드풀은 스레드가 작업을 처리하지 않고 놀더라도(?) 스레드의 개수가 줄지 않습니다. newCachedThreadPool( )에서는 60초 동안 동작이 없는 스레드는 제거되는 것과 상반됩니다.
아래의 예제는, CPU 코어의 수만큼 최대 스레드를 사용하는 스레드풀 생성 예제입니다.
ExecutorService executorService = Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors()
);
만약, newCachedThreadPool( )과 newFixedThreadPool( ) 메서드를 사용하지 않고 코어 스레드 개수와 최대 스레드 개수를 설정하려면, 직접 ThreadPoolExecutor 객체를 생성하면 됩니다(사실 두 개의 Executor의 static 메서드도 내부적으로 ThreadPoolExecutor 객체를 생성해서 리턴합니다).
아래 예제는 초기 스레드 개수 0개, 코어 스레드 개수 3개, 최대 스레드 개수가 100개인 스레드풀을 생성합니다. 또한, 코어 스레드 3개를 제외한 나머지 추가된 스레드가 120초 동안 놀 경우, 해당 스레드를 제거합니다.
ExecutorService threadPool = new ThreadPoolExecutor(
3, // 코어 스레드 수
100, // 최대 스레드 수
120L // 노는 시간
TimeUnit.SECONDS, // 노는 시간 단위
new SynchronousQueue<Runnable>() // 작업 큐
);
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(9) - 스레드 풀 3 : 작업 생성과 처리 요청 1 (0) | 2025.01.12 |
---|---|
멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 3 (0) | 2025.01.10 |
멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 1 (2) | 2025.01.07 |
멀티 스레드(9) - 스레드 풀 1 : 스레드 풀의 정의 (0) | 2025.01.05 |
멀티 스레드(8) - 스레드 그룹 5 (2) | 2025.01.02 |