jdk线程池

1、核心线程数设置:

CUP密集型任务:线程执行任务时一直会利用CUP,应该尽可能避免线程上下文切换。

  比如Java非IO等待操作。

  公式:CPU核心数+1(+1是因为存在某些因素导致当前线程需等待,为最大化利用CUP所以+1)

  或:Runtime.getRuntime().availableProcessors()+1获取

 

IO密集型任务:线程执行任务时大部分时间在IO等待数据,CUP空闲时间多,应该尽可能利用CUP。

  比如网络请求IO、Mysql查询数据IO,文件IO等。

  公式:2*CPU核心数

  或:线程数=CPU核心数*(1+线程等待时间/线程运行总时间)   (其中线程等待时间指线程没有使用CPU的时间,比如阻塞在了IO;线程运行总时间指线程执行完某个任务的总时间)

  获取线程等待时间、线程运行总时间的方法:利用jvisualvm抽样来估计这两个时间。

image

 如上图,其中:IO所占时间(线程等待时间)=总时间-总时间(CPU)

混合任务

posted @ 2026-03-13 18:38  幻影黑子  阅读(1)  评论(0)    收藏  举报