哈喽,小伙伴们,大家好。今天给大家分享的是线程的join方法,这个方法很重要,利用这个方法,你可以实现很多比较强大的功能。好了,废话少说一点,进入正题。
Thread 的 join 方法是一个非常重要的方法,使用它的特性可以实现很多比较强大的功能,Thread 的 API 为我们提供了三个不同的 join 方法。
public final void join() throws InterruptedException public final void join (long millis) throws InterruptedException public final void join (long millis, int nanos) throws InterruptedExceptionjoin 某个线程 A,会使当前线程 B 进入等待,直到线程 A 结束生命周期,或者到达给定的时间,那么在此期间 B 线程是处于 Blocked 的。代码如下:
public class ThreadJoin { public static void main(String[] args) throws InterruptedException { // 1. 定义两个线程 Thread t1 = new Thread(() -> printNum()); Thread t2 = new Thread(() -> printNum()); // 2. 启动这两个线程 t1.start(); t2.start(); // 3. 执行这两个线程的 join 方法,这两个线程执行完成之后再执行main线程 t1.join(); t2.join(); // 4. main 线程循环输出 printNum(); Thread.currentThread().join();// 一直阻塞 } private static void printNum() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + "#" + i); // try { // TimeUnit.SECONDS.sleep(1); // } catch (InterruptedException e) { // e.printStackTrace(); // } } } }上面的代码结合 Java8 的语法,创建了两个线程,分别启动,并且调用了每个线程的 join 方法(注意:join 方法是被主线程调用的,因此在第一个线程还没结束生命周期的时 候,第二个线程的 join 不会得到执行,但是此时,第二个线程也已经启动了),运行上面的程序,你会发现线程一和线程二会交替的输出直到他们结束生命周期,main 线程的循环才会开始运行。如果你将第三步下面的 join 全部注释掉,那么三个线程将会交替的输出。 join 方法会使当前线程永远的等待下去,直到期间被另外的线程中断,或者 join 的线程执行结束,当然你也可以使用 join 的另外两个重载方法,指定毫秒数,在指定的时间到达之后,当前线程也会退出阻塞。
本章节主要就是讲解join方法。下一节,会进行join的实战环节。希望大家多多支持。