2013-05-07 49 views
1

在Java中,如果我有一個從構造函數創建線程的類(通過調用該類的某些函數),並在我的main方法中創建該類的一個對象。主要方法是等待所有線程完成還是繼續到下一行?在執行下一行之前,主方法是否等待所有線程完成?

例如:

public static void main(String[] args) { 
    WorksWithThreads obj = new WorksWithThreads (); 

    //does something else - does this line happen after all the 9 threads finished their job? 
} 

class WorksWithThreads(){ 
    public WorksWithThreads(){ 
     for(int i=0;i<9;i++) 
      WithThread tread= new WithThread(); 
    } 

    private static class WithThread extends Thread { 

     public WithThread() { 
      run(); 
     } 

     public void run(){ 
      //does something 
     } 
    } 

} 

我希望我是不是太混亂..預先感謝您.. 使然

+1

好像它會是相當容易的測試運行後,9個線程created.Here你還沒有開始的9 threads.So有一個困惑的線程和一個sysout。 – 2013-05-07 18:42:59

+6

您的代碼不會啓動任何線程。要啓動線程,必須調用start()方法。一個線程不應該從它的構造函數中啓動。 – 2013-05-07 18:43:00

回答

1

號線的非常的一點是,他們不停止執行產生它們的線程。 main()將在WorksWithThreads完成其所有線程完成後繼續執行,但其生成的線程將與main的其餘部分同時執行。

3

如果你確實產生新的線程main方法將完成產卵(但線程結束之前,假設他們運行了一段時間)

,但你不產卵線程之後繼續。您正在創建Thread類的實例。要真正產生新的線程,你必須調用start。像你一樣調用run()只是一個普通的方法調用,處理只會在完成後繼續。

您可能想要完成official tutorial about this topic的工作。

+0

正確的我忘了它..但它以某種方式甚至沒有調用start()...我做了類似的東西從構造函數..它是一個並行的快速排序如果(左<右){ pivot = partition( ARR,左,右); QuickSortThread thread1 = new QuickSortThread(arr,pivot + 1,right); quicksort(arr,left,pivot-1); }我不知道它是如何在不調用start()的情況下對我的數組進行實際排序的。 – Ohad 2013-05-07 18:52:59

+2

那麼,你調用run()來執行你的代碼,它只是在同一個線程中連續運行。 (從你發佈的代碼來判斷) – 2013-05-07 18:54:44

0

是的,他們在執行前主下一行會被執行

相關問題