(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可以用来临时加入线程执行

posted @ 2017-07-14 10:22  测试开发分享站  阅读(90)  评论(0编辑  收藏  举报