简单来说,假如A线程希望等待B线程执行完成后再执行自身代码,A线程就可以通过调用B线程的join方法来实现。示例代码如下:
public class MyClass {
private static Thread t2;
private static Thread t1;
public static void main(String[] args) {
System.out.println("join test--->Main Thread start");
t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 5; i++) {
System.out.println("join test--->t1 Thread "+i);
}
}
});
t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("join test--->t2 Thread "+i);
}
System.out.println("join test--->t2 Thread end");
}
});
t1.start();
t2.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("join test--->Main Thread end");
}
}
以上代码中,主线程调用了t1的join方法,t1线程调用了t2线程的join方法,所以结果应该是主线程会等待t1线程执行结束后再执行自己的代码,而t1要等待t2线程执行结束后再执行自身代码。
运行结果: