为什么以下程序在不同的情况下执行后会产生不同的结果呢?
程序的代码如下:
// Use join(). 
 
class MyThread implements Runnable { 
  int count; 
  Thread thrd; 
 
  // Construct a new thread. 
  MyThread(String name) { 
    thrd = new Thread(this, name); 
    count = 0; 
    thrd.start(); // start the thread 
  } 
 
  // Begin execution of new thread. 
  public void run() { 
    System.out.println(thrd.getName() + " starting."); 
    try {  
      do { 
        Thread.sleep(500); 
        System.out.println("In " + thrd.getName() + 
                           ", count is " + count); 
        count++; 
      } while(count < 10); 
    } 
    catch(InterruptedException exc) { 
      System.out.println(thrd.getName() + " interrupted."); 
    } 
    System.out.println(thrd.getName() + " terminating."); 
  } 

 
class JoinThreads { 
  public static void main(String args[]) { 
    System.out.println("Main thread starting."); 
 
    MyThread mt1 = new MyThread("Child #1"); 
    MyThread mt2 = new MyThread("Child #2"); 
    MyThread mt3 = new MyThread("Child #3"); 
 
    try { 
      mt1.thrd.join(); 
      System.out.println("Child #1 joined."); 
      mt2.thrd.join(); 
      System.out.println("Child #2 joined."); 
      mt3.thrd.join(); 
      System.out.println("Child #3 joined."); 
    } 
    catch(InterruptedException exc) { 
      System.out.println("Main thread interrupted."); 
    } 
 
    System.out.println("Main thread ending."); 
  } 
}在我的计算机上执行后的结果是:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #1, count is 0
In Child #2, count is 0
In Child #3, count is 0
In Child #1, count is 1
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 2
In Child #2, count is 2
In Child #3, count is 2
In Child #1, count is 3
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 4
In Child #2, count is 4
In Child #3, count is 4
In Child #1, count is 5
In Child #2, count is 5
In Child #3, count is 5
In Child #1, count is 6
In Child #2, count is 6
In Child #3, count is 6
In Child #1, count is 7
In Child #2, count is 7
In Child #3, count is 7
In Child #1, count is 8
In Child #2, count is 8
In Child #3, count is 8
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
In Child #2, count is 9
Child #2 terminating.
Child #2 joined.
In Child #3, count is 9
Child #3 terminating.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
但是在其他计算机上执行时却产生了如下结果:
/*
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #2, count is 0
In Child #1, count is 0
In Child #3, count is 0
In Child #2, count is 1
In Child #3, count is 1
In Child #1, count is 1
In Child #2, count is 2
In Child #1, count is 2
In Child #3, count is 2
In Child #2, count is 3
In Child #3, count is 3
In Child #1, count is 3
In Child #3, count is 4
In Child #2, count is 4
In Child #1, count is 4
In Child #1, count is 5
In Child #3, count is 5
In Child #1, count is 5
In Child #2, count is 6
In Child #3, count is 6
In Child #2, count is 6
In Child #1, count is 7
In Child #3, count is 7
In Child #1, count is 7
In Child #2, count is 8
In Child #3, count is 8
In Child #2, count is 8
In Child #3, count is 9
Child #3 terminating.
In Child #2, count is 9
Child #2 terminating.
In Child #1, count is 9
Child #1 terminating.
Child #1 joined.
Child #2 joined.
Child #3 joined.
Main thread ending.
请按任意键继续. . .*/
为什么Child#x会产生不同的顺序啊?
实在是想不通,期待高手解答。