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的线程在运行时是怎样调度的???调度算法怎样实现的? 请高手帮忙!!!
// 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的线程在运行时是怎样调度的???调度算法怎样实现的? 请高手帮忙!!!
join就是把几个线程放在一起合并使用