如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才从thread.join()返回。线程Thread除了提供join()方法之外,还提供了join(long millis)和join(long millis, int nanos)两个具备超时特性的方法。这两个超时方法表示,如果线程thread在给定的超时时间里没有终止,那么将会从该超时方法中返回。
@Slf4j public class Hello { @Slf4j public static class HelloThread extends Thread { @SneakyThrows @Override public void run() { log.info("hello start"); Thread.sleep(2000); log.info("hello end"); } } public static void main(String[] args) throws InterruptedException { log.info("main start"); Thread thread = new HelloThread(); thread.start(); thread.join();//HelloThread没执行完,main线程可能就执行完了, Thread有一个join方法,可以让调用join的线程等待该线程结束 log.info("main end"); } }
参考: Java并发编程的艺术 4.3.5 Thread.join()的使用
Java编程的逻辑 15.1 线程的基本概念