스레드 풀에 대해 얼마나 알고 있나요?

1.스레드 풀이란 무엇인가요?

스레드 풀은 실제로 멀티 스레드 처리의 한 형태로, 처리 중에 작업을 대기열에 추가할 수 있으며 스레드가 생성된 후 이러한 작업이 자동으로 시작될 수 있습니다.

2. 스레드 풀을 사용하는 이유:

1. 스레드 생성 및 소멸 횟수를 줄이면 각 작업자 스레드를 재사용하고 여러 작업을 수행할 수 있습니다.

2. 과도한 메모리 소모로 인해 서버가 소진되는 것을 방지하기 위해 시스템 용량에 따라 스레드 풀에서 작동하는 스레드 수를 조정할 수 있습니다. (각 스레드에는 약 1MB의 메모리가 필요합니다. 더 많은 스레드가 열릴수록 더 많은 메모리가 필요합니다.) 메모리가 더 커지고 결국에는 충돌이 발생합니다.)

3. 자원 소비를 줄입니다. 생성된 스레드를 재사용하여 스레드 생성 및 소멸 비용을 줄입니다.

4. 응답 속도를 향상시킵니다. 작업이 도착하면 스레드가 생성될 때까지 기다리지 않고 즉시 작업을 실행할 수 있습니다.

5. 스레드 관리성을 향상시킵니다. 스레드는 희소한 자원이므로 제한 없이 생성할 경우 시스템 자원을 소모할 뿐만 아니라 시스템의 안정성을 저하시키므로 스레드 풀을 통합 할당, 튜닝, 모니터링 등에 사용할 수 있습니다.

Java에서 스레드 풀의 최상위 인터페이스는 Executor이지만 엄밀히 말하면 Executor는 스레드 풀이 아니라 스레드를 실행하기 위한 도구일 뿐입니다. 실제 스레드 풀 인터페이스는 ExecutorService입니다.

3. 스레드 풀의 7개 매개변수

corePoolSize 스레드 풀 코어 스레드 크기

maximumPoolSize 스레드 풀의 최대 스레드 수

keepAliveTime 유휴 스레드 생존 시간

단위 유휴 스레드 생존 시간 단위

workQueue 작업 대기열

threadFactory 스레드 팩토리

핸들러 거부 정책

4. 일반적으로 사용되는 Thread Pool (4종)

  • 고정 길이 스레드 풀(FixedThreadPool)

newFixedThreadPool은 최대 동시 스레드 수를 제어할 수 있는 고정 길이 스레드 풀을 생성하며, 초과하는 스레드는 대기열에서 대기합니다.

  • 예약된 스레드 풀(ScheduledThreadPool)

newScheduledThreadPool은 예약된 스레드 풀을 생성하여 예약되고 주기적인 작업 실행을 지원합니다.

  • 캐시 가능한 스레드 풀(CachedThreadPool)

newCachedThreadPool은 캐시 가능한 스레드 풀을 생성하는데, 스레드 풀의 길이가 처리 요구량을 초과하면 유휴 스레드를 유연하게 재활용할 수 있으며, 재활용할 수 없는 경우에는 새 스레드를 생성합니다.

  • 단일 스레드 스레드 풀(SingleThreadExecutor)

newSingleThreadExecutor는 작업을 실행하는 유일한 작업 스레드만 갖는 단일 스레드 스레드 풀을 생성하여 모든 작업이 지정된 순서(FIFO, LIFO, 우선 순위)로 실행되도록 보장합니다.

추천

출처blog.csdn.net/m0_58823014/article/details/126406885