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