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 ========结束=========
可见是执行完了第一个线程之后再执行的第二个线程。