在Java多线程编程中,join()
方法用于协调线程的执行顺序,其核心作用是:让当前线程(调用方)等待另一个线程(被调用方)执行完毕,再继续执行后续代码。
核心作用
- 等待线程结束:
- 若线程A调用线程B的
join()
方法,线程A会进入阻塞状态,直到线程B执行完毕(即线程B的run()
方法结束)。 - 若线程B已经结束,
join()
会立即返回,线程A继续执行。
- 若线程A调用线程B的
- 协调执行顺序:
- 常用于主线程等待子线程完成任务,确保子线程的结果可用后再继续执行。
使用场景示例
public class JoinExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
System.out.println("子线程开始执行");
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行完毕");
});
thread.start();
System.out.println("主线程等待子线程...");
thread.join(); // 主线程在此等待,直到子线程结束
System.out.println("主线程继续执行");
}
}
输出如下:
主线程等待子线程...
子线程开始执行
子线程执行完毕
主线程继续执行
在这个例子中,main方法所代表的主线程一开始就在运行,紧接着遇到另一线程(thread)同步进行,因为模拟了thread线程中有一部分运行耗时,所以程序会先运行到main线程的第一个sout语句,并调用thread线程的join方法,让当前线程(main)等待另一个线程(thread)执行完毕,再继续执行后续代码。