我联系多线程,敲了下面的代码,为啥输出结果不一样。
package test.thread;
/**
@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]
/**
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;
}
}
}
/**
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循环。