多线程问题,求解

我联系多线程,敲了下面的代码,为啥输出结果不一样。
package test.thread;
/**

  • @author 尉文涛
  • @date:2010-3-10上午09:58:01
    */
    public class ThreadTest1 {

    public static void main(String[] args) throws Exception {
    int i=0;
    Hello t=new Hello();
    t.start();

    while(true){
        System.out.println("Good morning"+i++);
        if(i==2&&t.isAlive()){
            System.out.println("Main waiting for Hello");
            t.join();
        }
        if(i==5) break;
    }
    

    }

}
class Hello extends Thread{
int i;
public void run(){
while(true){
System.out.println("Hello"+i++);
if(i==5) break;
}
}
}

第一次执行结果为下:Good morning0
Good morning1
Main waiting for Hello
Hello0
Hello1
Hello2
Hello3
Hello4
Good morning2
Good morning3
Good morning4
第二次执行结果为:
Hello0
Hello1
Hello2
Hello3
Hello4
Good morning0
Good morning1
Good morning2
Good morning3
Good morning4
不明白,各位帮忙说一下原因?

因为,有两条线程在执行,当你Hello子线程的启动的时间是由vm来分配并决定的...当你执行t.start()时,并不是马上就得到了执行...所以会有不同的输出...谢谢,分给我吧...我也有问题问的啊...
[code]
/**

  • @author 尉文涛
  • @date:2010-3-10上午09:58:01 */ public class ThreadTest1 {

public static void main(String[] args) throws Exception {
int i=0;
Hello t=new Hello();
t.setName("Hello Thread");
t.start();

while(true){
System.out.println("Good morning"+i++);
if(i==2&&t.isAlive()){
System.out.println("Main waiting for Hello");
t.join();
}
if(i==5) break;
}

}

}
class Hello extends Thread{
int i;
public void run(){
while(true){
System.out.println(getName()+" : Hello"+i++);
if(i==5) break;
}
}
}
/**

  • @author 尉文涛
  • @date:2010-3-10上午09:58:01 */ public class ThreadTest1 {

public static void main(String[] args) throws Exception {
int i=0;
Hello t=new Hello();
t.setName("Hello Thread");
t.start();

while(true){
System.out.println("Good morning"+i++);
if(i==2&&t.isAlive()){
System.out.println("Main waiting for Hello");
t.join();
}
if(i==5) break;
}

}

}
class Hello extends Thread{
int i;
public void run(){
while(true){
System.out.println(getName()+" : Hello"+i++);
if(i==5) break;
}
}
}
[/code]

第一次是 先进入Main的While循环,然后Hello 才执行的

第二次是 Hello 先执行, 执行5次后,才进入Main的While循环。