介绍
在 Java 中,线程是执行并发任务的重要工具。而 Thread.join() 方法是用于控制线程执行顺序的一种机制,它可以让主线程(或其他线程)暂停运行,等待某个线程完成后再继续执行。
当一个线程 A 调用了另一个线程 B 的 join() 方法,线程 A 会暂停执行,直到线程 B 运行完毕后,线程 A 才会继续执行。这是一种 线程协作 的方式,常用于确保线程间的执行顺序。
不使用Thread.join
package cn.meowrain;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Main {
static int i = 0;
public static void main(String[] args) throws InterruptedException {
test();
}
static void test() {
log.info("开始");
Thread t1 = new Thread(() -> {
for (int j = 1; j <= 100; j++) {
i++;
}
}, "t1");
t1.start();
log.info("结束");
log.info("结果为: {}", i);
}
}
这是因为main线程刚运行就结束了,而t1线程才开始,所以打印了结果为0
package cn.meowrain;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Main {
static int i = 0;
public static void main(String[] args) throws InterruptedException {
test();
}
static void test() throws InterruptedException {
log.info("开始");
Thread t1 = new Thread(() -> {
for (int j = 1; j <= 100; j++) {
i++;
}
}, "t1");
t1.start();
t1.join();
log.info("结束");
log.info("结果为: {}", i);
}
}