介绍

在 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);
    }
}