2014-03-06 50 views
1

我最近開始學習多線程。我嘗試下面的代碼:爲什麼我的多線程Java代碼不能提供順序輸出?

class AThread extends Thread { 
    int input; 

    public AThread(int y) { 
     input=y; 
    } 

    public void compute() { 
     System.out.println(input*input); 
    } 

    public void run() { 
     compute(); 
    } 
} 

public class ThreadDemo { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     AThread a=new AThread(1); 
     AThread b=new AThread(2); 
     AThread c=new AThread(3); 
     a.start(); 
     b.start(); 
     c.start(); 
    } 
} 

輸出

有時候我

4 
1 
9 

但其他時候,

1 
9 
4 

爲什麼會出現這種情況?我仍然是一名新秀。請按照我的標準回答。

+0

http://docstore.mik.ua/orelly/java-ent/dist/ch04_03.htm – amudhan3093

+0

如果它們按順序執行,那麼線程是什麼? – m0skit0

回答

9

因爲這就是多線程是:在並行中做東西;除非手動同步,否則不指定線程的相對順序。

它在你的書中。

+1

我唯一要補充的是你在「平行」中犯了一個錯字:) –

0

你一次做多件事。除非手動同步,否則CPU執行的命令是未指定的。

0

當您創建新的Thread並啓動它們時,您將執行順序留給JVM(Java虛擬機 - 所有Java程序運行的環境)。這類似於在操作系統層分叉進程。你放棄了順序處理的任何控制,作業調度程序允許各種線程/進程CPU時間,因爲它認爲合適。

相關問題