Java线程Join详解(作用用法及使用原理)

Java线程Join详解(作用用法及使用原理)-mikechen

线程Join在Java面试经常被问到,比如:线程Join的作用以及线程Join使用等,下面我就来详解@mikechen

线程Join介绍

线程(Thread)是操作系统能够进行运算调度的最小单位,在Java多线程编程中,我们常常需要等待某个线程执行完成后再执行其它操作,这时候就需要用到线程的Join方法。

 

线程Join作用

join()方法的作用:就是让主线程等待子线程执行结束之后,再运行主线程。

具体来说,当一个线程调用另一个线程的Join方法时,当前线程会被阻塞,直到被Join的线程执行完成后,当前线程才会继续执行。

 

线程Join用法

线程Join的语法,如下所示:

public final void join() throws InterruptedException

调用 join() 方法,会让当前线程等待调用 join() 方法的线程执行完毕后再继续执行。

下面是一个简单的示例:

public class JoinExample {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println("Thread 1: " + i);
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println("Thread 2: " + i);
            }
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println("All threads are done.");
    }
}

在这个例子中,创建了两个线程 t1 和 t2,并启动它们。

然后,调用了 t1.join() 和 t2.join() 方法,让主线程等待这两个线程执行完毕后再继续执行。

 

线程Join原理

当一个线程调用另一个线程的 join() 方法时,它会进入等待状态,直到另一个线程执行完毕。

这是因为 join() 方法实际上是调用了另一个线程的 wait() 方法,而 wait() 方法会使线程进入等待状态,直到调用 notifyAll() 方法,唤醒等待中的线程。

join() 方法的源码如下:

public final synchronized void join() throws InterruptedException {
    while (isAlive()) {
        wait(0);
    }
}

可以看到,join() 方法是一个 synchronized 方法,它会不断地调用 wait() 方法,直到被等待的线程执行完毕。

以上就是线程Join详解,更多Java多线程编程,请查看:Java多线程编程详解(看这篇就足够了)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法