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

    public void setThreadFactory(ThreadFactory threadFactory) {
        if (threadFactory == null)
            throw new NullPointerException();
        this.threadFactory = threadFactory;

    }


    public ThreadFactory getThreadFactory() {
        return threadFactory;
    }

这个是线程工厂的setter和getter方法 判断参数为空就抛出异常 


    public void setRejectedExecutionHandler(RejectedExecutionHandler handler) {
        if (handler == null)
            throw new NullPointerException();
        this.handler = handler;
    }


    public RejectedExecutionHandler getRejectedExecutionHandler() {
        return handler;
    }

这个是拒绝策略的setter和getter方法


    public void setCorePoolSize(int corePoolSize) {
        if (corePoolSize < 0)
            throw new IllegalArgumentException();
        int delta = corePoolSize - this.corePoolSize;
        this.corePoolSize = corePoolSize;
        if (workerCountOf(ctl.get()) > corePoolSize)
            interruptIdleWorkers();
        else if (delta > 0) {
            int k = Math.min(delta, workQueue.size());
            while (k-- > 0 && addWorker(null, true)) {
                if (workQueue.isEmpty())
                    break;
            }
        }
    }

这个是设置corePoolSize的方法

判断如果参数小于0 就抛出异常

创建临时变量delta值为参数和成员变量corePoolSize的差

将成员变量corePoolSize赋为参数

判断如果worker数目大于参数

调用interruptIdleWorkers方法打断空闲worker的线程

如果worker数目不大于参数 并且delta大于0 也就是参数比原来的corePoolSize大

取delta和workQueue长度的最小值 

进入while循环 添加空闲worker 使空worker数等于成员变量corePoolSize


    public int getCorePoolSize() {
        return corePoolSize;
    }

corePoolSize的getter方法


    public boolean prestartCoreThread() {
        return workerCountOf(ctl.get()) < corePoolSize &&
            addWorker(null, true);
    }

这个是预先启动核心线程的方法

返回worker数是否小于corePoolSize 且 添加空worker是否返回true


    void ensurePrestart() {
        int wc = workerCountOf(ctl.get());
        if (wc < corePoolSize)
            addWorker(null, true);
        else if (wc == 0)
            addWorker(null, false);
    }

这个是确保可以预先启动的方法

先获取worker数wc 判断worker数如果小于corePoolSize 就添加一个空worker addWorker方法core参数传入true

如果worker数为0 添加空worker addWorker方法core参数为false


    public int prestartAllCoreThreads() {
        int n = 0;
        while (addWorker(null, true))
            ++n;
        return n;
    }

预先启动所有的核心线程的方法

创建临时变量n 

进入while循环 循环条件是addWorker方法添加空worker的返回值为true

n自增 最后返回n


    public boolean allowsCoreThreadTimeOut() {
        return allowCoreThreadTimeOut;
    }

是否允许核心线程超时的方法 就是allowCoreThreadTimeOut的getter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值