join()
方法在 Java 中主要用于线程之间的协作。当一个线程调用另一个线程的 join()
方法时,调用 join()
方法的线程会被阻塞,直到被 join()
的线程执行完毕或者超过指定的等待时间。
join()
方法有两个版本:
public final void join(long millis) throws InterruptedException
这个版本的 join()
方法接受一个长整型参数 millis
,表示等待的最长时间(以毫秒为单位)。如果在指定的时间内,被 join()
的线程还没有执行完毕,那么调用 join()
的线程会继续执行,不再等待。
public final void join()
这个版本的 join()
方法不接受任何参数,表示无限期地等待被 join()
的线程执行完毕。
示例:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("子线程开始执行");
try {
Thread.sleep(2000); // 模拟子线程执行耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行完毕");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start(); // 启动子线程
try {
myThread.join(); // 主线程调用子线程的 join() 方法,主线程会等待子线程执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程继续执行");
}
}
输出结果:
子线程开始执行
主线程继续执行
子线程执行完毕
在这个示例中,主线程调用了子线程的 join()
方法,因此主线程会等待子线程执行完毕后再继续执行。