Java多线程教程:Thread中的join方法
原创大约 3 分钟
Java多线程教程:Thread中的join方法
Java中的join
方法用于暂停当前线程的执行,直到指定线程完成执行。当需要确保某个线程完成任务后再继续程序时,这个方法特别有用。join
方法可以在线程实例上调用,有三种重载形式:join()
、join(long millis)
和join(long millis, int nanos)
。
目录
- join方法变体
- 使用
join()
方法示例 - 使用
join(long millis)
方法示例 - 使用
join(long millis, int nanos)
方法示例 - 结论
1. join方法变体
join()
暂停当前线程,直到指定线程执行完毕。
public final void join() throws InterruptedException
join(long millis)
暂停当前线程,等待指定毫秒数或线程完成(以先发生者为准)。
public final void join(long millis) throws InterruptedException
join(long millis, int nanos)
暂停当前线程,等待指定毫秒数+纳秒数或线程完成(以先发生者为准)。
public final void join(long millis, int nanos) throws InterruptedException
join()
方法示例
2. 使用class MyThread extends Thread { public MyThread(String name) { super(name); // 设置线程名称 } @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName() + "正在运行"); try { Thread.sleep(500); // 休眠500毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { MyThread t1 = new MyThread("线程-1"); MyThread t2 = new MyThread("线程-2"); MyThread t3 = new MyThread("线程-3"); t1.start(); // 启动线程1 t2.start(); // 启动线程2 t3.start(); // 启动线程3 try { t1.join(); // 等待线程1完成 t2.join(); // 等待线程2完成 t3.join(); // 等待线程3完成 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("所有线程执行完毕"); } }
输出:
线程-1正在运行 线程-2正在运行 线程-3正在运行 线程-1正在运行 线程-2正在运行 线程-3正在运行 线程-1正在运行 线程-2正在运行 线程-3正在运行 所有线程执行完毕
join(long millis)
方法示例
3. 使用class MyThread extends Thread { public MyThread(String name) { super(name); } @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "正在运行"); try { Thread.sleep(1000); // 休眠1秒 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { MyThread t1 = new MyThread("线程-1"); t1.start(); try { t1.join(3000); // 等待3秒或线程完成 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程继续执行"); } }
输出:
线程-1正在运行 线程-1正在运行 线程-1正在运行 主线程继续执行 线程-1正在运行 线程-1正在运行
join(long millis, int nanos)
方法示例
4. 使用class MyThread extends Thread { public MyThread(String name) { super(name); } @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "正在运行"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { MyThread t1 = new MyThread("线程-1"); t1.start(); try { // 等待2秒500毫秒或线程完成 t1.join(2000, 500000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主线程继续执行"); } }
输出:
线程-1正在运行 线程-1正在运行 主线程继续执行 线程-1正在运行 线程-1正在运行 线程-1正在运行
5. 结论
Java的join
方法用于控制线程执行流程。通过join()
、join(long millis)
和join(long millis, int nanos)
方法,可以确保某个线程完成后再继续其他线程的执行。这有助于协调任务,确保程序在必要条件满足后再继续运行。