思想:
- 享元模式,利用已有的资源对新的请求进行复用,从而提高吞吐量
ThreadPoolExecutor
线程池状态
ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量
构造方法
- corePoolSize 核心线程数目 (最多保留的线程数)
- maximumPoolSize 最大线程数目
- keepAliveTime 生存时间 - 针对救急线程
- unit 时间单位 - 针对救急线程
- workQueue 阻塞队列
- threadFactory 线程工厂 - 可以为线程创建时起个好名字
- handler 拒绝策略
- 救急线程用于处理超出阻塞队列之外的任务
使用线程池
拒绝策略
JDK内置四个拒绝策略:
ScheduledExecutorService
ScheduledExecutor又称任务调度线程池,延迟执行:
定时执行demo:
Fork/join线程池
- Fork/Join 是 JDK 1.7 加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的 cpu 密集型运算
- 所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一些计算,如归并排序、斐波那契数列、都可以用分治思想进行求解
- Fork/Join 在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率
- Fork/Join 默认会创建与 cpu 核心数大小相同的线程池
使用
- 继承RecursiveTask
接口(有返回值的) - 编写compute方法,任务拆分的逻辑
- forkjoinPool执行