(55)join:等待线程终止
一、
public class Demo implements Runnable{
public void run() {
for(int x=0;x<5;x++) {
System.out.println(Thread.currentThread().getName()+"-----"+x);
}
}
}
public class JionDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo d=new Demo();
Thread t1=new Thread(d);
Thread t2=new Thread(d);
t1.start();
t2.start();
for(int x=0;x<10;x++) {
System.out.println("main"+"-----"+x);
}
System.out.println("over");
}
}
执行结果:
从上图可以看出这些线程是交替执行的。
二、在主程序的t1.start();下面加入t1.join();
执行结果为:
join的作用:等待该线程终止。
具体解释:
主线程往下走时,当读到t1.join()时,t1就申请加入运行中来(或者申请CPU执行权),因为是主线程读到,所以执行权在主线程那里,所以呢,t1知道后,将执行权放弃,主线程就冻结了(放弃执行权),将执行权给t1,然后当t1线程执行结束后(t1一直有执行权,直到t1结束)才将主线程唤醒,这样就可以理解主线程等待t1线程终止这句话了。然后t2和主线程交替执行。
应用:在编程过程中,当满足某一条件时,要执行某一个线程,就可以这样做。
若t2.start();下面加入t1.join();
主线程开启了t1、t2,t1.join()后,主线程冻结,t1,t2都有执行资格,争执行权,当t1执行完后,主线程唤醒,主线程和t2交替执行,也有可能在主线程没醒时,t2执行完了,那么最终只有主线程执行。
join 特点:当A线程执行到了B线程的join方法时,A线程就会等待,等B线程都执行完后,A线程才执行。
join可以用来临时加入线程执行