赞
踩
ThreadPoolExecutor继承自抽象类AbstractExecutorService,该抽象类实现了ExecutorService接口。ThreadPoolExecutor也是我们运用最多的线程池。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize:线程池中所保存的核心线程数。线程池启动后默认是空的,只有任务来临时才会创建线程以处理请求。
maximumPoolSize:线程池允许创建的最大线程数。它与corePoolSize的作用是调整“线程池中实际运行的线程的数量”。当新任务提交给线程池时,如果线程池中运行的线程数量小于corePoolSize,则创建新线程来执行任务;如果此时,线程池中运行的线程数量大于corePoolSize,但小于maximumPoolSize,则仅当阻塞队列满时才创建新线程。如果corePoolSize与maximumPoolSize相同,则创建固定大小的线程池。如果将maximumPoolSize设置为基本的无界值(如Integer.MAX_VALUE),则允许线程池适应任意数量的并发任务。keepAliveTime:当前线程池线程总数达到核心线程数时,终止多余的空闲线程的时间。
Unit:keepAliveTime参数的时间单位,可选值有毫秒、秒、分等。
workQueue:任务队列。如果当前线程池达到核心线程数量corePoolSize后,且当前所有线程都处于活动状态时,则将新加入的任务放到此队列中。
任务队列:
1、ArrayBlockingQueue:基于数组的有界阻塞队列;
2、LinkedBlockingQueue:基于链表的无界阻塞队列;
3、SynchroniousQueue:不存储元素的阻塞队列;
4、PriorityBlockingQueue:具有优先级的无对阻塞队列。
threadFactory:线程工厂,让用户可以定制线程的创建过程,一般不需要设置。
Handler:拒绝策略,当线程池和任务队列workQueue都满了的情况下,对新加的任务采取的处理策略。
饱和策略:
1、new ThreadPoolExecutor.DiscardPolicy();
2、new ThreadPoolExecutor.AbortPolicy();
3、new ThreadPoolExecutor.CallRunsPolicy();
4、new ThreadPoolExecutor.DiscardOldestPolicy();
5、自定义策略。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。