共同学习Java源代码-多线程与并发-ThreadPoolExecutor类(九)

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);

    }


    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             threadFactory, defaultHandler);
    }


    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              RejectedExecutionHandler handler) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), handler);
    }


    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
        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;
    }

这个是最基础的构造方法 

参数里corePoolSize是基本线程池大小 就是没有任务执行时的线程池的大小

maximumPoolSize是最大线程池大小

keepAliveTime是线程超时值

unit是时间单位

workQueue是worker的队列

threadFactory是线程工厂

handler是拒绝策略

先判断参数是否合法 

然后给成员变量赋值


最下面的构造方法是所有构造方法的基础 

第一个构造方法中Executors.defaultThreadFactory()作为线程工厂 defaultHandler作为拒绝策略(就是AbortPolicy) 

第二个构造方法中defaultHandler是默认拒绝策略

第三个构造方法中Executors.defaultThreadFactory()是线程工厂 参数handler是要传入的拒绝策略 

其他参数基本没什么好说的

你可能感兴趣的:(Java)