在多线程编程中,
join()
方法是用于将一个线程加入到当前线程,并且让当前线程等待被加入线程执行完成后再继续执行。
join()
方法的主要作用是协调线程之间的执行顺序。当一个线程调用另一个线程的join()
方法时,它将等待被加入线程执行完成,然后再继续执行自己的后续操作。
join()
方法有以下几个用法:
join()
方法的基本用法:public final void join() throws InterruptedException
在这种用法下,调用
join()
方法的线程会等待被加入线程执行完成,然后再继续执行自己的后续操作。如果被加入线程已经结束了,那么join()
方法会立即返回。示例代码:
public class Main { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { try { // 模拟耗时操作 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程执行完成"); }); thread.start(); System.out.println("主线程开始等待子线程执行完成"); thread.join(); System.out.println("主线程继续执行"); } }
输出:
主线程开始等待子线程执行完成 子线程执行完成 主线程继续执行
在上述示例中,主线程创建并启动了一个子线程,并调用子线程的
join()
方法。主线程会等待子线程执行完成后再继续执行。因为子线程执行需要一定时间(2秒),所以主线程会暂时被阻塞,直到子线程执行完成。
join(long millis)
方法的用法:public final void join(long millis) throws InterruptedException
在这种用法下,调用
join(long millis)
方法的线程会等待被加入线程millis
毫秒的时间,如果在指定时间内被加入线程没有执行完成,那么当前线程会解除阻塞继续执行。示例代码:
public class Main { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { try { // 模拟耗时操作 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程执行完成"); }); thread.start(); System.out.println("主线程开始等待子线程执行完成"); thread.join(1500); System.out.println("主线程继续执行"); } }
输出:
主线程开始等待子线程执行完成 主线程继续执行 子线程执行完成
在上述示例中,主线程等待子线程执行1.5秒,然后继续执行。因为子线程执行需要2秒,所以在指定时间内子线程没有执行完成,主线程解除阻塞后继续执行。
通过使用
join()
方法,我们可以确保线程之间的协调和顺序执行,以满足特定的逻辑需求。