线程池学习

ThreadPoolExecutor(int corePoolSize,
                                   int maximumPoolSize,
                                   long keepAliveTime,
                                   TimeUnit unit,
                                   BlockingQueue<Runnable> workQueue,
                                   ThreadFactory threadFactory,
                                    RejectedExecutionHandler handler)

先来看看构造函数的参数,解释下:

  • corePoolSize         除非设置allowCoreThreadTimeOut,否则就是保留在池中的线程数(即使它们是空闲的)
  • maximumPoolSize    池中允许的最大线程数
  • keepAliceTime       当线程数大于corePoolSize时,这是多余的空闲线程在终止新任务之前等待新任务的最长时间。
  • unit                         keepAliveTime参数的时间单位
  • workQueue            用于在任务执行前保存任务的队列。这个队列只包含execute方法提交的可运行任务。
  • threadFactory        线程工厂
  • handler                  由于达到线程边界和队列容量而阻塞执行时使用的处理程序

1. 如果运行的线程小于corePoolSize,则尝试用给定的命令作为第一个任务启动一个新线程。
    对addWorker的调用原子性地检查runState和workerCount,因此可以通过返回false来防止错误警报,因为错误警报会在不应该添加线程的时候添加线程。
2. 如果一个任务可以成功排队,那么我们仍然需要再次检查是否应该添加一个线程(因为自上次检查以来已有的线程已经死亡),或者池在进入这个方法后关闭。
    因此,我们重新检查状态,如果必要的话,如果停止,则回滚队列;如果没有,则启动一个新线程。
3. 如果无法对任务排队,则尝试添加新线程。如果它失败了,我们知道我们被关闭或饱和,所以拒绝任务。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值