ThreadPoolExecutor

3527 단어 자바
ThreadPoolExecutor 스 레 드 탱크 만 들 기
 public ThreadPoolExecutor(int corePoolSize, // 1
                              int maximumPoolSize,  // 2
                              long keepAliveTime,  // 3
                              TimeUnit unit,  // 4
                              BlockingQueue workQueue, // 5
                              ThreadFactory threadFactory,  // 6
                              RejectedExecutionHandler handler ) { //7
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

번호
명칭.
유형
속뜻
1
corePoolSize
int
핵심 스 레 드 탱크 크기
2
maximumPoolSize
int
최대 스 레 드 탱크 크기
3
keepAliveTime
long
스 레 드 최대 남 은 시간
4
unit
TimeUnit
시간 단위
5
workQueue
BlockingQueue
스 레 드 대기 행렬
6
threadFactory
ThreadFactory
스 레 드 공장 만 들 기
7
handler
RejectedExecutionHandler
거부 정책
  • core PoolSize 는 maximum PoolSize 와 같 습 니 다. 즉, 그 스 레 드 는 모두 핵심 스 레 드 이 고 고정 크기 의 스 레 드 탱크 이 며 그 장점 입 니 다.
  • keepAliveTime = 0 이 매개 변 수 는 기본적으로 핵심 스 레 드 에 유효 하지 않 으 며, Fixed ThreadPool 은 모두 핵심 스 레 드 입 니 다.
  • work Queue 는 링크 드 BlockingQueue (무한 차단 대기 열) 이 고, 대기 열 최대 치 는 Integer. MAX 입 니 다.VALUE。작업 제출 속도 가 남 은 작업 처리 속 도 를 지속 하면 대기 열 이 많이 막 힐 수 있 습 니 다.대기 열 이 크기 때문에 정책 을 거부 하기 전에 메모리 가 넘 칠 수 있 습 니 다.열세
  • Fixed ThreadPool 의 임 무 는 무질서 합 니 다.
  • package com.zkl;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    /**
     * Created by ${ZKL} on 2019/3/14.
     */
    public class ThreadPool {
        ThreadPoolExecutor threadPoolExecutor = null;
        public void init() {
    
            threadPoolExecutor = new ThreadPoolExecutor(5, 10, 10,
                    TimeUnit.SECONDS, new ArrayBlockingQueue(50),new ThreadPoolExecutor.CallerRunsPolicy());
        }
        public void destory() {
            if (threadPoolExecutor != null) {
                threadPoolExecutor.shutdown();
            }
        }
         public ThreadPoolExecutor getPoll() {
            if (threadPoolExecutor != null) {
               return   this.threadPoolExecutor=threadPoolExecutor;
            }else {
                return null;
            }
    
        }
    
        public static void main(String[] args) {
            ThreadPool pool = new ThreadPool();
            pool.init();
            for (int i = 1; i < 100; i++) {
                System.out.println("   " + i + "   !");
                pool.getPoll().execute(new Runnable() {
                    @Override
                    public void run() {
                    try {
                        	System.out.println(">>>task is running=====");
                            TimeUnit.SECONDS.sleep(10);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });
    
            }
           pool.destory();
        }
    
    }
    
    
    

    좋은 웹페이지 즐겨찾기