我有一个四核处理器,并且ThreadPoolExecutor设置为4个核心线程,但是当我将可调用对象(大约一百个)提交给ThreadPoolExecutor时,Java永远不会使用超过25%的CPU。为什么不使用所有这些?
有问题的代码:
static class Sum implements Callable{
private double bigarray[];
public Sum(double [] bigarray){
this.bigarray = bigarray;
}
@Override
public Double call(){
double sum = 0;
for (int i = 0; i < bigarray.length; i++){
sum += bigarray[i];
}
return sum;
}
}
最佳答案
通常,Java中目前没有接口来控制内核和处理器的相似性,因此您的代码(和线程)由OS安排正确的时间进行调度。您可能不喜欢它。
据说很好Running multiple threads on multiple CPU cores?
通常,这不是JVM的工作;分配的是操作系统
JVM是线程的核心,它只是一个程序。如果您正在运行此
在MS Windows计算机上,您可以尝试为
JVM,即告诉调度程序(任务管理器)JVM有哪些CPU(核心)
允许使用。
但是我不认为这是一条路。
请参阅堆栈溢出问题How does Java makes use of multiple cores?的答案。