线程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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》