在项目中,小伙伴们时常会遇到需要异步处理的情况,比如:我在查询本地结果之前,有一个调用第三方接口保存or更新数据的步骤,为了不影响本地查询响应速度,选择使用异步处理,这里就需要使用的到线程池。
private ExecutorService executorService = new ThreadPoolExecutor(5,//核心线程池大小
10,//最大核心线程池大小
3,//空闲线程存活时间
TimeUnit.SECONDS,//时间单位
new LinkedBlockingDeque<>(3),//阻塞队列
Executors.defaultThreadFactory(),//线程工厂:创建线程的,一般不用动
new ThreadPoolExecutor.DiscardOldestPolicy());//拒绝策略
其中,拒绝策略有几种类型
new ThreadPoolExecutor.AbortPolicy() // 不执行新任务,直接抛出异常,提示线程池已满
new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里!由调用线程处理该任务
new ThreadPoolExecutor.DiscardPolicy() //不执行新任务,也不抛出异常
new ThreadPoolExecutor.DiscardOldestPolicy() //丢弃队列最前面的任务,然后重新提交被拒绝的任务。
好啦,分享就到这里,祝大家生活美满,工作愉快!