package test;
/**
* Join使用注意事项
* 1.Thread.join()必须放在Thread.start()之后才有意义。
* 2.Thread.join表示调用join()方法的该线程夺取了CPU执行权,直到该线程执行完毕,其他线程才加入进来。
*
*
*/
public class Demo {
public static void main(String[] args) throws InterruptedException {
joinDemo jd=new joinDemo();
Thread t1=new Thread(jd);
Thread t2=new Thread(jd);
t1.start();
t1.join();//t1夺取了CPU执行权
t2.start();
for(int j=0;j<30;j++){
Thread.sleep(5);//睡眠5毫秒
System.out.println("Main线程正在运行...");
}
}
}
class joinDemo implements Runnable{
@Override
public void run() {
for(int i=0;i<30;i++){
try {
Thread.sleep(5);//睡眠5毫秒
System.out.println(Thread.currentThread().getName()+"正在运行....");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行结果:
结论:当Main线程运行到t1.join()方法时,t1夺取了CPU执行权,当t1线程(也就是Thread-0)运行结束后,Main线程和t2线程才轮流抢夺CPU执行权。