스레드풀(threadPool)
: 작업 처리에 사용되는 스레드를 제한된 개수만큼 미리 만들어서 작업 큐 (Queue) 에 들어오는
작업들을 이미 만들어진 스레드가 하나씩 맡아서 처리하는 방식이다
작업처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와서 처리한다
스레드풀 사용 후에는 반드시 정상종료(shutdown()) 해줘야 한다
이러한 방식을 사용하면 스레드 재사용하면서 성능이 향상, 메모리부족이나 cpu과부하를 방지하는 리소스 관리가 편하다
- 스레드풀 생성
| 메소드명(매개변수) | 초기 수 | 코어 수 | 최대 수 | 특징 |
| newCachedThreadPool() | 0 | 0 | Integer.MAX_VALUE | - 작업 수에 따라 동적으로 스레드를 생성 및 제거 - 스레드 재사용 가능 - 60초 동안 사용되지 않으면 스레드 제거 |
| newFixedThreadPool(int n Thtreads) | 0 | 생성된 수 | nThreads | - 고정된 수의 스레드로 작업 처리 - 스레드 수 초과 시 작업은 대기열에 저장 - 작업의 양이 일정하거나 자원 제한이 필요한 경우에 적합 |
| 초기 수 | nThreads (초기에 스레드풀이 생성될 설정한 수만큼의 스레드가 생성되는 수) |
| 코어 수 | nThreads (스레드가 증가된 후 사용되지 않는 스레드를 제거할 때 최소한 풀에서 유지하는 스레드 수) |
| 최대 수 | nThreads (코어 수와 최대 수가 동일, 스레드풀의 크기는 설정한 값으로 고정) |
◆ 스레드풀 종료
: 스레드풀의 스레드는 기본적으로 데몬 스레드가 아니기 때문에 main 스레드가 종료되더라도 작업을 처리하기 위해 계속 실행상태로 남아있다
스레드풀의 모든 스레드를 종료하려면 ExecutorService의 다음 메소드중 하나를 실행 한다
shutdown() : 남아있는 작업을 마무리하고 스레드풀을 종료할 때 사용
shutdownNow() : 남아있는 작업과 상관없이 강제종료 할 때 사용
| 리턴 타입 | 메서드명(매개변수) | 설명 |
| void | shutdown() | 스레드풀이 새로운 작업을 받지 않고, 현재 진행 중이거나 대기 중인 작업이 모두 완료될 때까지 기다린 후 스레드풀을 종료한다 이 메서드를 호출해도 진행 중인 작업은 계속 실행된다 |
| List<Runnable> | shutdownNow() | 스레드풀을 즉시 종료하며, 대기 중인 작업을 모두 취소한다 실행 중인 작업은 interrupt()를 통해 중단을 시도합니다. 대기 중인 작업 목록을 반환한다 |
| boolean | awaitTermination(long timeout, TimeUnit unit) | shutdown() 호출 후, 스레드풀이 완전히 종료될 때까지 또는 주어진 시간 동안 대기한다 대기 시간이 지나기 전에 종료되면 true를 반환하고, 그렇지 않으면 false를 반환한다 |
'Java' 카테고리의 다른 글
| Java_컬렉션 자료구조_List 컬렉션 (0) | 2024.10.17 |
|---|---|
| Java_컬렉션 자료구조_컬렉션 프레임워크 (0) | 2024.10.17 |
| Java_데몬 스레드 (2) | 2024.10.17 |
| Java_스레드의 안전종료 (0) | 2024.10.17 |
| Java_Wait() notify() 이용한 스레드 제어 (1) | 2024.10.17 |