我有一个四核处理器,并且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?的答案。

10-08 13:21