Java 可调用代码赢得';ThreadPoolExecutor不能使用多个CPU

Java 可调用代码赢得';ThreadPoolExecutor不能使用多个CPU,java,multithreading,Java,Multithreading,我有一个四核处理器,ThreadPoolExecutor设置为4个核心线程,但是当我向ThreadPoolExecutor提交我的可调用(大约100个)时,Java从未使用超过25%的CPU。为什么不全部使用呢 有关守则: static class Sum implements Callable{ private double bigarray[]; public Sum(double [] bigarray){ this.bigarray = bigarray;

我有一个四核处理器,ThreadPoolExecutor设置为4个核心线程,但是当我向ThreadPoolExecutor提交我的可调用(大约100个)时,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;
    }
}
静态类和实现可调用{
私有双bigarray[];
公共和(双[]bigarray){
this.bigarray=bigarray;
}
@凌驾
公共双呼电话(){
双和=0;
for(int i=0;i
您可以通过调用
Runtime.getRuntime().availableProcessors()
尝试查看java程序可用的CPU数量。您正在运行的平台可能限制您仅使用一个CPU(例如,如果您在虚拟环境中运行程序)。

一般来说,Java中目前没有控制内核和处理器亲缘关系的接口,因此您的代码(和线程)由操作系统按其认为合适的方式进行调度。你可能不喜欢。 正如人们所说的那样

一般来说,这不是JVM的工作;分配资源的是操作系统 JVM是线程的核心,只是一个程序。如果你在做这个 在MS Windows计算机上,您可以尝试为 JVM,即告诉调度程序(任务管理器)JVM的CPU(核心) 允许使用

但我不认为这是一条路要走


请参阅堆栈溢出问题的答案。

您需要发布一个简短、自包含、正确(可编译)的示例()。