前提:spa
设有两个线程,其中一个为主线程,在主线程中调用另一个线程,称为目标线程线程
情景:code
在主线程中建立子线程,并启动子线程,而子线程中要进行大量的耗时运算,当主线程处理到某个位置时,须要用到子线程的处理结果(此时子线程还未结束),这时候就要用到join();方法。在主线程的某个位置执行了目标线程.join();方法后,主线程将再也不继续向下执行,而将等待目标线程终止后,主线程才会再向下执行。 资源
代码例子以下 :unicode
package commicropower;
it
class JoinTest1 implements Runnable{io
public static int a = 0; class
public void run() { 方法
for (int k = 0; k < 5; k++) { im
a = a + 1;
}
}
}
public class JoinTest {
public static void main(String[] args) throws Exception {
Runnable r = new JoinTest1();
Thread t = new Thread(r);
t.start();
t.join();
System.out.println(JoinTest1.a);
}
}
加入t.join();方法运行结果为5 不加此方法, 运行结果为0
总结:当主线程 main方法执行System.out.println(a);这条语句时,线程尚未真正开始运行,或许正在为它分配资源准备运行。由于为线程分配资源须要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);,这个时候获得的结果是a尚未被 改变的值0 。怎样才能让输出结果为5!其实很简单,join() 方法提供了这种功能。join() 方法,它可以使调用该方法的线程在此以前执行完毕。