有线程t1、t2,t2调用了t1的join方法,则t2需要等待t1运行结束才能运行完成。
例子:
public class ThreadJoinTest {
public static void main(String[] args){
System.out.println("程序开始运行...");
//t2内部使用t1,所以这里t1使用final修饰
final Thread t1 = new Thread(){
@Override
public void run(){
try {
System.out.println("t1开始执行");
Thread.sleep(5000);
System.out.println("t1结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
long time1 = System.currentTimeMillis();
System.out.println("t2开始执行");
Thread.sleep(2000);
t1.join();
long time2 = System.currentTimeMillis();
System.out.println("t2等待了"+(time2-time1)/1000+"秒");
System.out.println("t2结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
}
}
运行结果:
运行结果说明:
t2本身的方法中线程休眠时间为2秒,t1的休眠时间为5秒,t2调用了t1的join方法,所以t2需要等待t1执行结束,所以t2总共耗费5秒时间。