线程池

1. 线程池作用:通过复用线程控制线程数量,来节省内存开销,和提高运行速度。

类: ThreadPoolExecutor.java

2. 创建对象时各个参数的含义:

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

corePoolSize: 核心线程数量。相当于公司中的在编人员数。

maximumPoolSize: 最大线程数。公司由于业务繁忙,队列排队也排满了,可以扩充一些临时工。公司可以一共雇佣多少人(在编 + 临时工)。

keepAliveTime:闲置线程存活时间。公司由于业务减少,临时工出现空闲。临时工可以留在公司的时间。

unit:设置keepAliveTime的单位

workQueue:工作队列。 如果业务实在繁忙,则加入工作队列,排队处理。

threadFactory: 线程工厂。用于创建线程。相当于公司的人力资源部。

handler:超过队列容量时,处理策略。

 ThreadPoolExecutor 里面定义了 4  handler 策略,分别是

1. CallerRunsPolicy :这个策略重试添加当前的任务,他会自动重复调用 execute() 方法,直到成功。

2. AbortPolicy :对拒绝任务抛弃处理,并且抛出异常。

3. DiscardPolicy :对拒绝任务直接无声抛弃,没有异常信息。

4. DiscardOldestPolicy :对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。



线程池执行的逻辑是,增加一个任务加一个worker, 当worker大于核心线程数时,放入队列排队处理,当队列也排满时,使用handler策略处理。

参考:http://blog.csdn.net/abing37/article/details/4506759


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值