【Java】ThreadPoolExecutor 사용자 정의 스 레 드 풀 생 성

2730 단어 백 엔 드Java
평소 프로젝트 에서 다 중 스 레 드 를 사용 할 때 jdk 자체 스 레 드 풀 을 만 드 는 네 가지 방법 을 사용 하지 않 는 것 을 권장 합 니 다.new Fixed ThreadPool,new Single ThreadExecutor,new Cached ThreadPool,new Scheduled ThreadPool.이것 도 알 리 바 바 의 인 코딩 규범 이 요구 한 것 이다.
Fixed ThreadPool 과 Single Thread Pool: 무한 대기 열 을 사용 합 니 다.요청 대기 열 길 이 는 Integer.MAX 입 니 다.VALUE,대기 열 에 대량의 요청 이 쌓 일 수 있 습 니 다.
new CachedThreadPool,new Scheduled ThreadPool:허용 되 는 생 성 스 레 드 수량 은 Integer.MAX 입 니 다.VALUE 는 무제 한 스 레 드 를 만 들 수 있 고 대량의 스 레 드 를 만 들 수 있 습 니 다.
이 네 개의 스 레 드 탱크 를 만 드 는 방법 은 모두 OOM 문 제 를 초래 하기 쉬 우 며 잠재 적 인 지연 위험 이 있다.
 
따라서 대량의 요청 이 있 을 수 있 는 스 레 드 풀 장면 에서 사용자 정의 Thread PoolExecutor 를 사용 하여 스 레 드 풀 을 만 드 는 것 을 추천 합 니 다.구체 적 인 구조 함수 설정 은 다음 과 같 습 니 다.
ublic ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

코어 풀 사이즈:핵심 라인 수.작업 이 수행 되 지 않 더 라 도 핵심 스 레 드 는 계속 존재 합 니 다.스 레 드 수가 핵심 스 레 드 보다 적 을 때 남 은 스 레 드 가 있어 도 핵심 스 레 드 에 도달 할 때 까지 스 레 드 를 만 듭 니 다.보통 1 로 설정 하면 됩 니 다.
maximumPoolSize:최대 스 레 드 수.스 레 드 탱크 에 존재 할 수 있 는 최대 스 레 드 수량 입 니 다.
keepAliveTime:스 레 드 여유 시간.스 레 드 가 keepAliveTime 에 이 르 렀 을 때 스 레 드 가 핵심 스 레 드 수 와 같 을 때 까지 종료(닫 기)합 니 다.
work Queue:대기 열 을 막 습 니 다.Array BlockingQueue 와 같은 경계 대기 열 을 사용 하 는 것 을 권장 합 니 다.생 성 할 때 크기 를 지정 합 니 다.
ThreadFactory:스 레 드 공장 생 성.일반적으로 스 레 드 이름 을 설정 하 는 데 사 용 됩 니 다.
handler:정책 거부.보통 로그 기록 등 으로 쓰 인 다.
스 레 드 탱크 크기 설정
일반적으로 작업 유형 에 따라 구분 되 며 CPU 를 N 핵 으로 가정 합 니 다.
CPU 밀집 형 태 스 크,즉 대량의 계산 작업 이 필요 합 니 다.라인 수량 을 줄 이 고 라인 전환 으로 인 한 비용 을 줄 여야 합 니 다.라인 풀 크기 를 N 으로 설정 할 수 있 습 니 다. + 1.
4.567917.IO 밀집 형 임무,즉 네트워크 를 통 해 상호작용 을 해 야 하 는 임무 로 데이터베이스 데이터 상호작용,파일 업로드 다운로드,네트워크 데이터 전송 등 임 무 를 말한다.스 레 드 수량 을 늘 릴 수 있 습 니 다.스 레 드 탱크 크기 를 N 으로 설정 할 수 있 습 니 다. * 2。그러나 실제 상황 에서 자신의 테스트 를 통 해 합 리 적 인 수 치 를 설정 할 수 있 고 큰 소 와 의 교 류 를 통 해 알 수 있 듯 이 이 수 치 는 CPU 핵심 수/(1-차단 계수)로 설정 할 수 있 으 며 차단 계 수 는 보통 0.8~0.9 사이 이다.예 를 들 어 8 핵 CPU 는 8*(1-0.9)=80 으로 설정 할 수 있다
혼합 형 임 무 는 CPU 밀집 형 과 IO 밀집 형 으로 나 누 어 독립 적 으로 설정 할 수 있다.
  • 주의:자바 에서 CPU 핵심 수 를 가 져 오 려 면 다음 코드 를 사용 할 수 있 습 니 다:Runtime.getRuntime().availableProcessors();

  •  
    스 레 드 탱크 의 사용 은 글 을 참고 할 수 있 습 니 다.
    https://www.cnblogs.com/nankeyimengningchenlun/p/9132987.html
    https://www.cnblogs.com/wood-lin/p/4221331.html
    https://www.jianshu.com/p/f6024f806534
    https://www.jianshu.com/p/a16425dbd6a3
    https://www.cnblogs.com/shoshana-kong/p/10941250.html

    좋은 웹페이지 즐겨찾기