자바 4 대 스 레 드 탱크

2656 단어
자바 는 Executors 를 통 해 네 가지 스 레 드 풀 을 제공 합 니 다. 각각:
스 레 드 풀 가 져 오기: ExecutorService pool = Executors. newCachedThreadPool () 등
1, newCachedThreadPool: 스 레 드 풀 Integer. MAXVALUE 는 무한대 로 60 초 안에 만 든 스 레 드 를 다시 사용 할 수 있 습 니 다. 두 번 째 작업 을 수행 할 때 첫 번 째 작업 이 완료 되 었 고 첫 번 째 작업 을 수행 하 는 스 레 드 (60 초) 를 다시 사용 합 니 다. 매번 새 스 레 드 를 사용 하지 않 아 도 됩 니 다.
버퍼 기능 을 가 진 스 레 드 탱크 를 만 들 고 corePoolSize = 0, maximumPoolSize = Integer. MAX 를 설정 합 니 다.VALUE, keepAliveTime = 60s, 그리고 용량 이 없 는 차단 대기 열 SynchronousQueue 입 니 다. 따라서 작업 을 제출 하면 새로운 스 레 드 를 만 들 것 입 니 다.스 레 드 여유 가 60s 를 초과 하면 소 멸 됩 니 다.
public static ExecutorService newCachedThreadPool() {  
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue());  
    }

2. new Fixed ThreadPool: 고정 라인 풀 을 만 들 고 스 레 드 의 최대 병발 수 를 제어 할 수 있 습 니 다. 초과 한 스 레 드 는 대기 열 에서 기다 릴 것 입 니 다.
고정 스 레 드 수의 스 레 드 풀 을 만 듭 니 다. 설정 한 core PoolSize 는 maximum PoolSize 크기 와 같 으 며, 동시에 무한 링크 드 BlockingQueue 를 사용 하여 차단 작업 을 저장 합 니 다. 따라서 불필요 한 작업 은 더 이상 차단 대기 열 이 존재 합 니 다. Rejected Execution Handler 에서 처리 하지 않 습 니 다.
public static ExecutorService newFixedThreadPool(int nThreads) {  
      return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue());  
  }

3. new Single ThreadExecutor: 단일 라인 화 된 스 레 드 풀 을 만 듭 니 다. 유일한 작업 스 레 드 로 만 작업 을 수행 하고 모든 작업 이 지정 한 순서 (FIFO, LIFO, 우선 순위) 에 따라 실 행 될 수 있 도록 합 니 다.
하나의 스 레 드 만 지원 하 는 스 레 드 풀 을 만 들 고 core PoolSize = maximum PoolSize = 1 을 설정 합 니 다.작업 이 스 레 드 직렬 로 실 행 될 것 을 보증 합 니 다.
public static ExecutorService newSingleThreadExecutor() {  
        return new FinalizableDelegatedExecutorService  
            (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()));  
    }

4. new Scheduled ThreadPool 은 고정된 길이 의 스 레 드 풀 을 만 들 고 지연 되 거나 시간 을 정 하 는 방식 으로 작업 을 수행 합 니 다.
정시 기능 이 있 는 스 레 드 탱크 를 구성 하고 corePoolSize 를 설정 하 며 무한 지연 차단 대기 열 Delayed WorkQueue 를 설정 합 니 다.재 미 있 는 것 은: maximum PoolSize = Integer. MAXVALUE, Delayed WorkQueue 는 무한 대기 열 이기 때문에 이 값 은 의미 가 없습니다.
public static ExecutorService newScheduledThreadPool(int corePoolSize) {         
    return new ScheduledThreadPool(corePoolSize, 
              Integer.MAX_VALUE,                                                  
              DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS,                                                    
              new DelayedWorkQueue());    
}

주: 스 레 드 탱크 거부 정책 은 무 계 대기 열 에 작용 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기