2011-07-20 41 views
0

我有一個四核處理器和的ThreadPoolExecutor設置爲4條芯線,但是當我提出我的可調用(百元左右)到ThreadPoolExecutor的,爪哇從不使用更超過25%的CPU。爲什麼不使用它們全部?贖回代碼不會使用一個以上的CPU採用的ThreadPoolExecutor

代碼中的問題:

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; 
    } 
} 
+0

您需要發佈一個簡短的,獨立的,正確的(可編譯),實例(http://sscce.org/)。 – g051051

回答

0

一般情況下,目前還沒有在java接口來控制內核和處理器的親和力讓你的代碼(和線程)是由OS計劃爲它找到合適的。你可能不喜歡它。 正如有人說好Running multiple threads on multiple CPU cores?

一般不是JVM的工作;它是爲線程分配 核心的操作系統,JVM只是一個程序。如果你是一個MS Windows機器上運行此 你可以嘗試設置「親和力」爲 JVM,即告訴JVM 被允許使用的CPU數量(核)的調度器(任務管理器)。

但我不認爲這是很長的路要走。

查看堆棧溢出問題的答案How does Java makes use of multiple cores?

1

你可以試試,看看有多少CPU,可以給你的java程序通過調用Runtime.getRuntime().availableProcessors()。您正在運行的平臺可能會限制您僅使用一個CPU(例如,如果您在虛擬環境中運行程序)。