ThreadPoolExecutor参数与拒绝策略
ThreadPoolExecutor参数的含义 https://www.jianshu.com/p/0e228dc30793
资料
1. **** 线程池之ThreadPoolExecutor使用 https://www.jianshu.com/p/f030aa5d7a28
2.**** 线程池拒绝策略及有界无界队列 https://www.jianshu.com/p/80b14c4c1ff4
线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
- corePoolSize: 核心线程池大小
- maximumPoolSize: 最大线程池大小
- keepAliveTime: 线程最大空闲时间
//当线程池中的线程数量大于 corePoolSize 时,如果某线程空闲时间超过 keepAliveTime ,线程将被终止。
这样,线程池可以动态的调整池中的线程数。
- unit: 线程池维护线程所允许的空闲时间的单位
unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。纳秒、微秒、毫秒、秒
- workQueue: 线程池使用的缓冲队列
ThreadPoolExecutor线程池的API文档中,一共推荐了三种等待队列,
它们是:SynchronousQueue、LinkedBlockingQueue和ArrayBlockingQueue;
同步队列 链接阻塞队列 数组阻塞队列
- threadFactory: ThreadFactory 线程工厂,用于创建线程
- handler: 线程池的拒绝策略
问题
1.拒绝策略什么时候使用
核心线程 corePoolSize 、任务队列 workQueue 、最大线程 maximumPoolSize ,如果三者都满了,使用
handler处理被拒绝的任务。
handler有四个选择:
ThreadPoolExecutor.AbortPolicy()
抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()
重试添加当前的任务,他会自动重复调用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务