核心参数
1、corePoolSize(核心池大小)
线程池可执行的线程数量,包含空闲的;
2、maximumPoolSize(线程池最大大小)
线程池所允许的最大线程个数,如果使用了无界队列,则忽略该参数;
3、keepAliveTime(线程存活时间)
超过核心池部分的线程最大可存活的时间;
4、workQueue(任务队列)
用来保存超出核心池部分的等待线程的阻塞队列;
5、threadFactory(线程工厂)
主要是用来给线程重命名的;
6、handler(饱和策略)
当线程超过线程池最大大小时,需要执行的策略;
工作流程
- 判断是否小于核心池大小,小于的就新建线程执行任务,大于久执行下一步;
- 判断阻塞队列是否已满,没满的话就加入阻塞队列,满了就执行下一步;
- 判断是否大于线程池最大大小,小于的话就新建线程执行任务,否则就执行饱和策略;
选择策略
1、CPU密集型任务:
建议选择小线程池,一般设置为CPU核数+1,因为CPU密集型任务占用CPU时间长;
2、IO密集型任务:
建议选择大线程池,一般是两倍CPU核数,这种任务CPU使用率不高,可以在线程IO时间等待时,让CPU去处理别的任务;