java-Thread重要的API—下—join方法

    科技2024-01-28  98

    哈喽,小伙伴们,大家好。今天给大家分享的是线程的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 InterruptedException

    线程 join 方法详解

    join 某个线程 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的实战环节。希望大家多多支持。

    Processed: 0.026, SQL: 8