1.线程池的执行策略:
官方文档里ThreadPool的构造方法最多参数的一组是这样表示的:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
Creates a new
ThreadPoolExecutor
with the given initial parameters.
理解 ThreadPoolExecutor 构造方法的参数把创建一个线程池想象成开个公司 . 每个员工相当于一个线程 .corePoolSize: 正式员工的数量 . ( 正式员工 , 一旦录用 , 永不辞退 )maximumPoolSize: 正式员工 + 临时工的数目 . ( 临时工 : 一段时间不干活 , 就被辞退 ).keepAliveTime: 临时工允许的空闲时间 .unit: keepaliveTime 的时间单位 , 是秒 , 分钟 , 还是其他值 .workQueue: 传递任务的阻塞队列threadFactory: 创建线程的工厂 , 参与具体的创建线程工作 .RejectedExecutionHandler: 拒绝策略 , 如果任务量超出公司的负荷了接下来怎么处理 .
2.线程池的拒绝策略
AbortPolicy():
超过负荷
,
直接抛出异常
.
CallerRunsPolicy():
调用者负责处理
DiscardOldestPolicy():
丢弃队列中最老的任务
.
DiscardPolicy():
丢弃新来的任务
.
eg:
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, // 核心线程数
10, // 最大线程数
5, // 线程空闲时长
TimeUnit.SECONDS, // 线程空闲时长的时间单位
new LinkedBlockingQueue<>(100), // 任务队列
new ThreadPoolExecutor.DiscardPolicy()); // 拒绝策略为忽略最新任务
这是利用ThreadExecutor类创建的线程池,里面的构造方法