线程池

来源:互联网 发布:路由器mac地址修改 编辑:程序博客网 时间:2024/06/10 08:45

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 0
原创粉丝点击