为了合理的配置线程池的线程数,我们把任务分为两种类型,第一种是CPU密集型,第二种是IO密集型。CPU密集型指的是没有IO交互的任务,就是没有用数据库,也没有生成文件,也没有网络请求。IO密集型就是我们的任务里面有数据库交互,有操作文件,有网络IO。
CPU密集型
公式 = CPU核心数 + 1
例如:int maximumPoolSize = Runtime.getRuntime().availableProcessors()+1;
IO密集型
IO密集型有两种,至于选择哪一种,要到自己服务器测试,哪种性能好就用哪种
第一种:
公式 = CPU核心数 * 2
例如:int maximumPoolSize = Runtime.getRuntime().availableProcessors() * 2;
第二种:
公式 = CPU核心数 / (1 - 阻塞系数)
例如:int maximumPoolSize = (int) (Runtime.getRuntime().availableProcessors()/(1-0.9));
阻塞系数:0.8——0.9之间,我们默认为0.9