public class ThreadJoinTest{ public static void main(String[] args) throws Exception{
// TODO 自動生成されたメソッド・スタブ
int i=0; Hello1 t=new Hello1();
Hello2 t1=new Hello2();
t.start();
t1.start();        int m=t.getPriority();
        System.out.println(m);
while(true){
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
}
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 Hello1 extends Thread{
int i;
public void run(){
while(true){
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
}
System.out.println("Hello1 "+i++);
if(i==5) break;
}
}
}
class Hello2 extends Thread{
int i;
public void run(){
while(true){
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
}
System.out.println("Hello2 "+i++);
if(i==5) break;
}
}
}
这是我在学习Java线程时把一个例题改了一下,运行时出现了3个结果,如下
5                                            
Good Morning0
Good Morning1
Main waiting for Hello!
Hello1 0
Hello1 1
Hello1 2
Hello1 3
Hello1 4
Hello2 0
Hello2 1
Hello2 2
Hello2 3
Hello2 4
Good Morning2
Good Morning3
Good Morning4
5
Good Morning0
Good Morning1
Main waiting for Hello!
Hello1 0
Hello1 1
Hello1 2
Hello1 3
Hello1 4
Good Morning2
Good Morning3
Good Morning4
Hello2 0
Hello2 1
Hello2 2
Hello2 3
Hello2 4
Hello1 0
Hello1 1
Hello1 2
Hello1 3
Hello1 4
5
Good Morning0
Good Morning1
Good Morning2
Good Morning3
Good Morning4
Hello2 0
Hello2 1
Hello2 2
Hello2 3
Hello2 4
高手请给我讲下出现3种结果的原因,Java的线程在运行时是怎样调度的???调度算法怎样实现的?  请高手帮忙!!!

解决方案 »

  1.   

    我们学JAVA怎么就没学到多线程,java中的多线程用的事不事很广泛呢
      

  2.   

    就这个Demo而言,结果不同是正常的,跑N多次结果都一样才不正常。学习多线程,建议看看《java多线程设计模式详解》这本书,日本人写的,入门还是不错的,完了以后可以学习下《java并发编程实践》提高。
      

  3.   

    主要是你使用了join把
         join就是把几个线程放在一起合并使用