네 가지 일반적인 스레드 풀에서 자바 --- 개인 요약

첫째, 스레드 풀의 분류는 장면과 자신 (개인 노트) 사이의 차이를 사용

  ① newCachedThreadPool : 재활용하지 않을 경우, 유휴 스레드를 되찾기 위해, 더 이상 치료가 필요한 경우에 비해, 새로운 실을 수있는 유연성을 스레드 풀을 캐시 스레드 풀을 만들

  바닥 분석 : corePoolSize를 0이다 60L에 KeepaliveTime은; maximumPoolSize를 인에 Integer.MAX_VALUE 유닛 TimeUnit.SECONDS이다 Workqueue는이 SynchronousQueue는 (동기 대기 행렬)이며

  사용 시나리오 하십시오 애플릿의 단기 비동기 실행의 많은 또는 부하가 적은 서버

  그것은 인기있는 설명입니다 : 새 작업이되면 SynchronousQueue는 동기 큐는, 그래서 당신이 스레드 수있는 경우, 풀에 사용 가능한 스레드를 실행하는 모양 때문에, 사용 가능한 스레드가 스레드를 생성하지가있는 경우, 실행, SynchronousQueue는 삽입 이 작업을 수행 할 수 있습니다, 지정된 크기보다 더 많은 유휴 스레드 풀 스레드가 파괴 될 경우.


  ② 인 newFixedThreadPool : 고정 된 크기의 스레드 풀을 만들고, 동시 스레드의 최대 수를 제어 할 수 있습니다, 초과 스레드는 큐에 대기

  아래의 분석 : ThreadPoolExecutor에 인스턴스를 반환은, 상기 수신 파라미터의 개수가 corePoolSize를 nThread 같이 쓰레드 세트 nThread, maximumPoolSize를가 nThread이고; KeepaliveTime은이 0L (개방)이다 유닛으로서 : TimeUnit.MILLISECONDS; Workqueue는 다음과 같음 : 새로운에 LinkedBlockingQueue <Runnable를> () 해결책 차단 큐되지

  사용 시나리오 : 장기 작업의 구현, 더 나은 성능

  인기 말하기 :; 풀의 모든 스레드가 사용중인 경우, 새로운 임무가 전환됩니다 연못 만들기 스레드의 고정 된 수를 수용 할 수는 생존 기간의 모든 스레드는 연못이 가득 차면 스레드를 추가하지, 무한 블로킹 큐 (바운드 블록 큐)


  ③ newSingleThreadExecutor이 : 그것은 단지 모든 작업은 지정된 순서대로 수행되는지 확인하기 위해 작업을 수행하는 단일 스레드와 함께 작동합니다, 단일 스레드 스레드 풀을 만들 수 있습니다 (FIFO, LIFO, 우선 순위)

  아래의 분석 : ThreadPoolExecutor에 예 FinalizableDelegatedExecutorService 포장, corePoolSize를 1이다 maximumPoolSize를 1이다 KeepaliveTime은이 0L이며 단위는 : TimeUnit.MILLISECONDS,이 Workqueue 같이 새로운에 LinkedBlockingQueue <Runnable를> () 큐를 차단하지 않고

  : 장면 사용하여 작업을 수행하는 작업의 장면을

  인기 말하기 : 스레드 풀 하나 개의 스레드 만, 생존 시간의 스레드를 생성 무한, 스레드가 사용중인 경우, 새 작업이 차단 큐 (바운드 형식 블록 큐)를 입력합니다


  ④ 인 newScheduledThreadPool는 : 정기적이고주기적인 작업 실행의 고정 길이 스레드 풀 지원을 만들

  아래의 분석 :; KeepaliveTime은 0이다 스케줄 할 인스턴스를 생성, 전달 된 파라미터 corePoolSize를는 maximumPoolSize를는 Integer.MAX_VALUE로는 단위이다 : TimeUnit.NANOSECONDS,이 Workqueue으로서 : 신규 DelayedWorkQueue () 정렬 큐 타임 아웃 오름차순

  사용 장면 : 정기적 인 작업의 장면

  인기 말하기 : 무제한, 스레드 풀 스레드의 생존 시간을 고정 된 크기의 스레드 풀을 만들려면 스레드 풀은 정기적이고주기적인 작업 실행을 지원하는 모든 스레드가 DelayedWorkQueue 큐를 입력하는 새로운 작업을 위해 바쁜 상태 경우 어떤 타임 아웃 시간 명령 큐 구조에 따라

둘째, 작업 실행 스레드 풀 프로세스 분석 :

  스레드 풀은 corePoolSize를 미만인 경우 1),이 때 자유 스레드 풀이 경우에도 작업을 수행하기 위해 새로운 스레드를 생성 할 새 작업을 제출합니다.

  스레드 풀은 corePoolSize를 도달하면 2),이 Workqueue, 실행 예정 대기 스레드 풀 작업을 배치됩니다 새 작업을 제출

  3) 전체이 Workqueue 및 maximumPoolSize를> corePoolSize를가 새로 제출 된 작업은 작업을 수행하기 위해 새로운 스레드를 생성 할 때

  여러 작업을 제출할 때 4) maximumPoolSize를 초과, RejectedExecutionHandler에 의해 처리 새 작업을 제출

  스레드 풀 스레드가 corePoolSize를,이 KeepAliveTime에 도달하는 유휴 시간을 초과하는 경우 5), 유휴 스레드를 종료

  6) corePoolSize를위한 유휴 true를 설정 allowCoreThreadTimeOut (), 스레드 풀 스레드는이 KeepAliveTime 폐쇄하는 경우

추천

출처www.cnblogs.com/rmxd/p/11230530.html