有什么凭证?
- IO密集型任务(一般来说:文件读写、DB读写、网络请求等)
- 核心消除数大小设置为2N+1
- CPU密集型任务(计算型代码、Bitmap转换、Gson转换等)
- 核心线程数大小设置为N+1
通过代码来查询机器的CPU核数
Runtime.getRuntime().availableProcessors();
如何确定核心线程数
- 高并发、任务执行时间短 --> CPU核心数+1,减少线程上下文切换
- 并发不高,任务执行时间长
- IO密集型的任务 -->(CPU核心数*2 + 1)
- 计算密集型任务 -->(CPU核心数 + 1)
3.并发高,业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置参考2