java 에서 ThreadPoolExecutor 상식 집합

스 레 드 탱크 기술 은 병행 할 때 자주 사용 되 는데 자바 의 스 레 드 탱크 사용 은 Thread PoolExecutor 를 호출 하여 이 루어 집 니 다.Thread PoolExecutor 는 네 개의 구조 함 수 를 제공 합 니 다.마지막 으로 다음 구조 방법 으로 귀 결 됩 니 다.

//          
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
이 매개 변수의 의 미 는 다음 과 같다.
코 어 풀 사이즈:이 스 레 드 탱크 의 핵심 스 레 드 수 최대 치maximumPoolSize:이 스 레 드 탱크 의 스 레 드 총수 최대 치keepAliveTime:이 스 레 드 탱크 의 비 핵심 스 레 드 방치 시간 초과유닛:keepAliveTime 의 단위
  • workQueue:대기 열 BlockingQueue 를 막 고 실행 을 기다 리 는 Runnable 대상 을 유지 합 니 다
  • threadFactory:스 레 드 인 터 페 이 스 를 만 들 려 면 그의 Thread new Thread(Runnable r)방법 을 실현 해 야 합 니 다
  • Rejected Execution Handler:포화 전략,최대 스 레 드 와 작업 대기 열 용량,이미 포화 되 었 을 때 execute 방법 은 모두 Rejected Execution Handler 를 호출 합 니 다
  • ThreadPoolExecutor 작업 절차
    흐름 도 는 다음 과 같다.

    대략적인 과정 은 다음 과 같다.
  • 스 레 드 탱크 에 작업 을 추가 합 니 다.작업 수량 이 corePoolSize 보다 적 을 때 자동 으로 thead 를 만들어 서 이 작업 을 처리 합 니 다
  • core PoolSize 보다 많 고 maximPoolSize 보다 적 을 때 스 레 드 를 만 들 지 않 고 이 작업 을 차단 대기 열 에 넣 고 실 행 될 때 까지 기 다 립 니 다
  • 4.567917.위의 2 조건 을 연결 하고 차단 대기 열 이 가득 찬 후에 thread 를 계속 만 들 고 차단 대기 열 을 가속 화 합 니 다
  • maximPoolSize 보다 작업 을 추가 할 때 포화 정책 에 따라 스 레 드 탱크 에 작업 을 계속 추가 할 수 있 는 지 여 부 를 결정 합 니 다.기본 포화 정책 은 AbortPolicy(직접 버 림)입 니 다
  • 스 레 드 탱크 에서 사용 할 차단 대기 열
  • Array BlockingQueue:배열 구 조 를 바탕 으로 하 는 경계 차단 대기 열,구조 함 수 는 반드시 크기 를 전달 해 야 합 니 다.FIFO(선진 선 출)
  • LinkedBlockingQueue:무한,기본 크기 65536(Integer.MAXVALUE)작업 을 대량으로 요청 하면 메모리 가 다 소모 되 기 쉽다
  • SynchronousQueue:동기 화 대기 열 은 특수 한 BlockingQueue 입 니 다.용량 이 없습니다.(이것 은 SynchronousQueue 에 다른 스 레 드 의 삭 제 를 기다 리 는 동작 을 삽입 하기 때 문 입 니 다.반대로 도 마찬가지 입 니 다.)구체 적 으로 참고 할 수 있 는 것 은:
  • Priority BlockingQueue:우선 대기 열,무한.
  • Delayed WorkQueue:이 대기 열 이 임 무 를 받 았 을 때 먼저 입대 하고 지 정 된 지연 시간 에 도달 해 야 임 무 를 수행 할 수 있 습 니 다
  • 차단 대기 열 에서 흔히 볼 수 있 는 방법 은 다음 표 와 같다.
    방법
    설명 하 다.
    주의 하 다.
    add
    원 삭 추가
    대기 열 이 가득 차 면 IIegaISlabEeplian 이상 을 던 집 니 다.
    remove
    대기 열 머리 에 있 는 요 소 를 제거 하고 되 돌려 줍 니 다.
    대기 열 이 비어 있 으 면 NoSuchElement Exception 이상 을 던 집 니 다.
    element
    대기 열 머리의 요 소 를 되 돌려 줍 니 다.
    대기 열 이 비어 있 으 면 NoSuchElement Exception 이상 을 던 집 니 다.
    offer
    원 소 를 추가 하고 트 루 로 돌아 가기
    대기 열 이 가득 차 면 false 로 돌아 갑 니 다.
    poll
    대기 열 머리 에 있 는 요 소 를 제거 하고 되 묻 습 니 다.
    대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
    peek
    대기 열 머리의 요 소 를 되 돌려 줍 니 다.
    대기 열 이 비어 있 으 면 null 로 돌아 갑 니 다.
    put
    요소 추가
    대기 열 이 가득 차 면 차단 합 니 다.
    take
    대기 열 머리 에 있 는 요 소 를 제거 하고 되 돌려 줍 니 다.
    대기 열 이 비어 있 으 면 차단 합 니 다.
    흔히 볼 수 있 는 네 가지 스 레 드 탱크
  • newCachedThreadPool
  • newFixedThreadPool
  • newSingleThreadExecutor
  • newScheduledThreadPool
  • 스 레 드 탱크
    사용 하 는 차단 대기 열
    스 레 드 탱크 크기
    시간 을 초과 하 다
    CachedThreadPool
    SynchronousQueue(대기 열 길이 무한
    증가 가능,최대 치 Integer.MAXVALUE
    기본 60 초 시간 초과
    FixedThreadPool
    LinkedBlockingQueue(대기 열 길이 무한)
    nThreads,고정 수량 지정 가능
    시간 을 초과 하지 않 습 니 다.
    newSingleThreadExecutor
    LinkedBlockingQueue(대기 열 길이 무한),
    고정
    시간 을 초과 하지 않다
    newScheduledThreadPool
    DelayedWorkQueue
    증가 가능,최대 치 Integer.MAXVALUE
    시간 을 초과 하지 않다
    이들 은 Executors 를 통 해 정적 인 방법 으로 직접 호출 하 는데 실질 적 으로 이들 이 최종 적 으로 호출 한 것 은 Thread PoolExecutor 의 구조 방법,즉 본 고의 맨 앞 에 있 는 코드 이다.
    주의:KeepAliveTime=0 은 기다 리 지 않 음 을 나타 낸다
    '알 리 바 바 자바 개발 매 뉴 얼'에 서 는 스 레 드 탱크 가 Executors 를 사용 하지 않 고 Thread PoolExecutor 방식 을 통 해 작성 자 들 이 스 레 드 탱크 의 운행 규칙 을 더욱 명확 하 게 하고 자원 소모 위험 을 피 할 것 을 권장 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기