java基本教程之join方法详解 java多线程教程


在Java中,`join` 方法是 `Thread` 类的一个非常有用的方法,它允许一个线程等待另一个线程完成其执行。这在多线程编程中特别有用,特别是当你需要确保某些任务在继续执行之前已经完成时。

### join 方法的基本用法

`join` 方法可以被当前运行的线程调用,以等待调用该方法的线程(即目标线程)终止。这会导致当前线程阻塞,直到目标线程结束。


public class JoinExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            try {
                // 模拟长时间运行的任务
                Thread.sleep(2000);
                System.out.println("子线程执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        System.out.println("主线程开始");

        // 启动子线程
        thread.start();

        try {
            // 等待子线程完成
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("主线程继续执行");
    }
}

### join 方法的重载

`join` 方法有几个重载版本,允许你指定等待的最长时间(以毫秒为单位)或纳秒为单位。如果指定的时间到了,但线程还没有结束,那么 `join` 方法会返回,而不会无限期地等待。


try {
    // 等待最多500毫秒
    thread.join(500);
} catch (InterruptedException e) {
    e.printStackTrace();
}

### 注意事项

- 调用 `join` 方法的线程会阻塞,直到目标线程结束。因此,如果目标线程是一个守护线程(daemon thread),并且没有其他非守护线程在运行,那么JVM可能会退出,即使 `join` 方法还没有返回。

- `join` 方法可能会抛出 `InterruptedException`,这意呀着当前线程在等待过程中被中断了。在这种情况下,你应该适当地处理这个异常,比如重新尝试等待或记录日志。

`join` 方法是Java多线程编程中同步和协调线程执行的重要工具之一。通过合理使用 `join` 方法,你可以确保程序的正确性和效率。