创建方式
ThreadPoolExecutor创建,了解线程创建参数避免资源耗尽。
核心参数
- 核心线程数
- 最大线程数
- 线程空闲时间
- 阻塞队列
ArrayBlockingQueueLinkedBlockingQuewuePriorityBlockingQueue
- 拒绝策略
- 丢弃任务并抛异常
- 直接丢掉新任务
- 丢掉队列中最早的任务
- 提交任务的线程执行该任务
任务提交执行流程
- 提交任务
- 判断当前线程数是否小雨核心线程,如果小于则创建核心线程执行
- 否则判断阻塞队列是否已满,如果已满执行4,否则5
- 判断当前线程数是否达到最大线程数,如果达到则触发拒绝策略,否则创建新线程执行
- 加入阻塞队列即可
参数设计
根据任务类型设计:
CPU密集型:与CPU核心数1~2倍。(不设置过多是CPU已经占用很高,避免无意义的上下文切换)
IO密集型:采用《Java并发编程实战》的作者 Brain Goetz 推荐的计算方法:线程数 = CPU 核心数 *(1+平均等待时间/平均工作时间)
压测确定
为了更准确的参数配置,可以通过压测来确定服务的最佳线程数量。