2016-07-07 175 views
-3

有時,Java中的主要方法似乎運行不正常。這是一個使用線程的例子。第二個線程先保持執行(它們都是在一個同步對象上運行,所以第二個線程應該等到第一個線程完成,但首先執行)。Java線程執行不按順序執行

public class Sync { 
    public static void main(String[] args) { 
     int a [] = { 1, 2, 3, 4, 5 }; 

     MyThread mt1 = new MyThread("Child #1", a); 
     MyThread mt2 = new MyThread("Child #2", a); 

     try { 
      mt1.thread.join(); 
      mt2.thread.join(); 
     } catch(InterruptedException exc) { 
      System.out.println("Main thread interrupted."); 
     } 
    } 
} 

我第一次跑在IDE的代碼,所以我認爲這可能是問題,但我用命令行的時候得到了相同的結果。

+0

請發佈「MyThread」類。沒有它,我們無法知道發生了什麼。 – BackSlash

+0

請閱讀java synchronized block – logger

+0

這段代碼不會做太多,因爲線程mt1和mt2永遠不會啓動。如果你能提供一個最小的工作例子,那會有幫助。 –

回答

1

我你的問題的解釋是,你認爲通過調用

try { 
      mt1.thread.join(); 
      mt2.thread.join(); 
    } 
在主函數

,你希望線程1執行,然後線程2

然而,通過調用MT1。的Thread.join();在主線程中,所有完成的操作都是暫停主函數的執行,直到mt1完成執行。這並沒有說明mt1在mt2之前,之後還是同時執行。所有它可能確保的是,主線程將首先等待mt1,然後等待mt2。

+0

這很有道理。謝謝! – yairks