欢迎访问宙启技术站
智能推送

Java线程之join_动力节点Java学院整理

发布时间:2023-05-16 04:58:30

Java中的join()方法是一个非常基本且重要的线程方法。它可以使一个线程等待另一个线程完成后再继续执行。

我们知道在Java程序中,多个线程可以同时执行,但是有时候我们希望某个线程执行完之后再执行其他的线程。join()方法就是达到这个目的的一种方式。在调用某个线程的join()方法时,当前线程将会被挂起,直到该线程执行完成。

语法:

public final void join()throws InterruptedException

调用该方法会使当前线程阻塞,直到该线程执行完成,或者其他的线程中断它。

join()方法有三种重载形式:

public final void join(long millis) throws InterruptedException;

public final synchronized void join(long millis,int nanos) throws InterruptedException;

public final synchronized void join() throws InterruptedException;

个重载方法,指定了等待时间,在规定的时间内,如果该线程没有执行完,则当前线程会继续执行。如果在等待的时间内线程已经执行完,则当前线程会立即继续执行。

第二个重载方法,除了等待的时间之外,还可以指定等待的时间的纳秒数。

第三个重载方法,没有指定等待时间,只是让当前线程阻塞直到该线程执行完成。

示例:

public class JoinTest {

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(new MyRunnable(), "Thread-1");

        Thread t2 = new Thread(new MyRunnable(), "Thread-2");

        t1.start();

        System.out.println("开启线程1");

        t2.start();

        System.out.println("开启线程2");

        // 等待t1和t2执行完

        t1.join();

        t2.join();

        System.out.println("所有线程执行完毕");

    }

    static class MyRunnable implements Runnable {

        @Override

        public void run() {

            System.out.println(Thread.currentThread().getName() + " 执行中...");

            try {

                Thread.sleep(2000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            System.out.println(Thread.currentThread().getName() + " 执行完毕");

        }

    }

}

输出:

开启线程1

开启线程2

Thread-1 执行中...

Thread-2 执行中...

Thread-1 执行完毕

Thread-2 执行完毕

所有线程执行完毕

从输出结果可以看出,在一开始开启两个线程之后,主线程调用了t1.join()和t2.join()方法,使其等待t1和t2执行完毕。最后,等待时间过后,所有线程都执行完毕,主线程才会继续执行。

总结:

join()方法是一个非常重要的线程方法,可以在多线程编程中实现线程之间的控制和协调。通过该方法可以使一个线程等待另一个线程执行完成后再继续执行。在使用join()方法时,需要注意线程的同步问题,以免出现死锁和其他问题。