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)
方法,可以确保某个线程完成后再继续其他线程的执行。这有助于协调任务,确保程序在必要条件满足后再继续运行。