java基础线程-join()

来源:互联网 发布:微信恶搞软件有哪些 编辑:程序博客网 时间:2024/06/07 05:15
package common;/** * Created by shao on 2016/11/3. */public class ThreadTest implements Runnable{    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " 我已开始运行了" );        synchronized(this){            try{                for(int i=0;i<5;i++){                    Thread.sleep(1000);                    System.out.println(Thread.currentThread().getName() + " " +i);                }            }catch (Throwable e) {                System.out.println(e);            }        }        System.out.println(Thread.currentThread().getName() + " 我运行结束了" );    }    public static void main(String args[]) {        ThreadTest tt=new ThreadTest();        try {            Thread th1 = new Thread(tt);            th1.setName("邵飞飞是高手");            th1.start();            Thread th2 = new Thread(tt);            th2.setName("高手");            th2.start();            th1.join();            System.out.println("join运行过来");        } catch (Throwable e) {            System.out.println(e);        }    }}


二、为什么要用join()方法

在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

即join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。

简单点说:a.join();之后的代码实在a线程结束后才会运行的。

a.join([time]),如果没有时间参数,则要a线程运行完才会执行join()之后的代码;如果有时间参数时间一到就开锁,a可以没有运行完

0 0