代码经验---java获取cpu个数-docker

一般在做多线程(cpu密集计算型的功能)的时候,会设置线程数,

(当然这里如果是io密集型的,一般会设置cpu的倍数,其实是有计算公式的,这里不考虑io密集型)

这个线程数一般会设置为硬件的核数,

如果虚拟机是8核,线程数就可以设置为8核。

那怎么获取核数呢?

Runtime.getRuntime().availableProcessors()

但是这个方法有一个问题,

如果工作在 docker 容器下,因为容器不是物理隔离的,会拿到物理 cpu 个数,而不是容器申请时的个数。

就是说比如我的虚拟机是8核,但是只给这个容器分了1核,

那这个方法还是拿的是8,那其实我这个容器是处理不过来的。

因此docker部署的话,还是建议手动设置一个值吧;

这个问题直到 jdk 10 才修复,使用 jvm 参数 UseContainerSupport 配置, 默认开启