2016-07-07 128 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