代码经验---java获取cpu个数-docker
一般在做多线程(cpu密集计算型的功能)的时候,会设置线程数,
(当然这里如果是io密集型的,一般会设置cpu的倍数,其实是有计算公式的,这里不考虑io密集型)
这个线程数一般会设置为硬件的核数,
如果虚拟机是8核,线程数就可以设置为8核。
那怎么获取核数呢?
Runtime.getRuntime().availableProcessors()
但是这个方法有一个问题,
如果工作在 docker 容器下,因为容器不是物理隔离的,会拿到物理 cpu 个数,而不是容器申请时的个数。
就是说比如我的虚拟机是8核,但是只给这个容器分了1核,
那这个方法还是拿的是8,那其实我这个容器是处理不过来的。
因此docker部署的话,还是建议手动设置一个值吧;
这个问题直到 jdk 10 才修复,使用 jvm 参数 UseContainerSupport 配置, 默认开启