2014-04-05 25 views
0

爲什麼我的Java線程似乎只在一個內核上運行,當我的機器有兩個?爲什麼我的Java線程似乎只在一個內核上運行,當我的機器有兩個?

我的程序有10個線程,每個打印更多的東西。 在輸出中,我可以看到打印的順序是:一旦線程開始完成,只有另一個線程開始打印。 因此,我不希望看到來自不同線程的交錯打印語句。

public class Calculator implements Runnable { 

     private int number; 

     public Calculator(int number) { 
      this.number=number; 
     } 

     @Override 
     public void run() { 
      for (int i=1; i<=10; i++){ 
        System.out.printf("%s: %d * %d = 
        %d\n",Thread.currentThread().getName(),number,i,i*number); 
      } 
     } 

} 

public class Main { 

    public static void main(String[] args) { 
      for (int i=1; i<=10; i++){ 
        Calculator calculator=new Calculator(i); 
        Thread thread=new Thread(calculator); 
        thread.start(); 
      } 
    } 
} 

問候

+3

代碼很重要。向我們展示代碼。 –

+0

你正在使用什麼操作系統?你用什麼JRE? – Jeffrey

+0

請添加更多信息(如代碼)。我不認爲你在看線程是如何工作的......否則請閱讀文檔:http://docs.oracle.com/javase/tutorial/essential/concurrency/ – pmac89

回答

2

爲了縮短討論的意見,並作爲一個簡單的例子,你可以試試你的Calclulator的這款改裝版。它應該以很好的混合方式打印輸出。

class Calculator implements Runnable 
{ 
    private int number; 

    public Calculator(int number) 
    { 
     this.number = number; 
    } 

    @Override 
    public void run() 
    { 
     for (int i = 1; i <= 10; i++) 
     { 
      System.out.printf("%s: %d * %d = %d\n", 
       Thread.currentThread().getName(), 
       number, i, i * number); 
      someRandomDelay(); 
     } 
    } 

    private static void someRandomDelay() 
    { 
     int ms = (int) (100 + Math.random() * 200); 
     try 
     { 
      Thread.sleep(ms); 
     } 
     catch (InterruptedException e) 
     { 
      Thread.currentThread().interrupt(); 
     } 
    } 

} 
相關問題