步骤1 :自定义拒绝策略接口
1)线程池状态
ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量
从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING
这些信息存储在一个原子变量ctl中目的是将线程池状态与线程个数合二为一,这样就可以用一次cas原子操作进行赋值
2)构造方法
1.定义
3. 创建多少线程池合适
1) 概念
Fork/Join 是 JDK 1.7加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的cpu密集型运算
所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一些计算,如归并排序、斐波那契数列、都可以用分治思想进行求解
For/Join 在分治的基础上加入多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率
Fork/Join 默认会创建于cpu核心数大小相同的线程池
2)使用
提交给Fork/ Join线程池的任务需要继承 RecursiveTask (有返回值)或RecursiveAction(没有返回值),列如下面定义了一个队1~n之间的整数求和的任务
用图来表示
改进优化 :
用图来表示 :
原文:https://www.cnblogs.com/haizai/p/12334358.html