Java并发编程--多线程中的join方法详解

Java Thread中, join()方法主要是让调用该方法的thread在完成run方法里面的部分后, 再执行join()方法后面的代码

例如:定义一个People类,run方法是输出姓名年龄。

class People implements Runnable{
    public String name ;
    public int age;
    public People(String name , int age){
        this.name =name;
        this.age = age;
    }
    @Override
    public void run() {
        
        System.out.println("开始输出");
        System.out.println("姓名"+name);
        System.out.println("年龄"+age);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("========结束=========");
        
    }
    
}

如果main方法中不使用join 如下

public static void main(String[] args) throws InterruptedException {
    People p1 = new People("张三",10);
    People p2 = new People("李四",11);
    Thread t1 = new Thread(p1);
    Thread t2 = new Thread(p2);
    t1.start();
    t2.start();    
}

那么输出为:

开始输出
开始输出
姓名张三
年龄10
姓名李四
年龄11
========结束=========
========结束=========

可见两个线程是同时开始的。

如果main方法中使用join,如下:

public static void main(String[] args) throws InterruptedException {
    People p1 = new People("张三",10);
    People p2 = new People("李四",11);
    Thread t1 = new Thread(p1);
    Thread t2 = new Thread(p2);
    t1.start();
    t1.join();
    t2.start();
    t2.join();
    
}

输出

开始输出
姓名张三
年龄10
========结束=========
开始输出
姓名李四
年龄11
========结束=========

可见是执行完了第一个线程之后再执行的第二个线程。

原文地址:https://www.cnblogs.com/gnivor/p/4686110.html