public class Demo { /** * Thread类的join()方法 * -------------------------------- * 1)join() * 2)join(long millis) * 3)join(long millis, int nanos) * 用法见代码中注释,可通过调整睡眠时间一一验证。 */ public static void main(String[] args) { // 创建一个线程组 ThreadGroup threadGroup = new ThreadGroup("ThreadGroup1"); // 在该线程组下创建一个线程t1 Thread t1 = new Thread(threadGroup, new Runnable() { @Override public void run() { try { Thread.sleep(3000); // 3秒后执行 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread1 end ..."); } }, "Thread1"); // 在该线程组下创建一个线程t2 Thread t2 = new Thread(threadGroup, new Runnable() { @Override public void run() { try { /* * t1.join(); * ---------------------------- * 等同于 t1.join(0); t1执行结束后执行t2. */ t1.join(); /* * t1.join(1000); * ---------------------------- * 等最多1s直至t1死亡。 * |- 如果1s内t1没死,t1执行1s后开始执行t2; * |- 如果1s内t1死了,不用等满1s直接开始执行t2; */ // t1.join(1000); /* * t1.join(1000, 1000); * ----------------------------------------- * 类似t1.join(1000); * 第一个1000,单位是毫秒,第二个1000单位是纳秒 . * |- 如果第一个参数不是1000,而是0,效果等同 t1.join(0 + 1); * |- 如果第二个参数大于50万,效果等同 t1.join(1000 + 1); * |- 如果第一个参数不为0,第二个参数小于50万,效果等同 t1.join(1000); * 有点延时执行的意思。但是延时的时间只能是0毫秒或1毫秒。 */ // t1.join(1000, 1000); Thread.sleep(1000); // 1s后执行 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread2 end ..."); } }, "Thread2"); // 启动线程 t1.start(); t2.start(); } }