Java執行緒的join方法
阿新 • • 發佈:2018-12-08
-
t.join()方法只會使主執行緒進入等待池並等待t執行緒執行完畢後才會被喚醒。
-
例題1:
public class JoinTest { public static void main(String [] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTest("小明"); ThreadJoinTest t2 = new ThreadJoinTest("小東"); t1.start(); t1.join(); t2.start(); } }
程式在main執行緒中呼叫t1執行緒的join方法,則main執行緒放棄cpu控制權,並返回t1執行緒繼續執行直到執行緒t1執行完畢,所以結果是t1執行緒執行完後,才到主執行緒執行,相當於在main執行緒中同步t1執行緒,t1執行完了,main執行緒才有執行的機會。
-
例題2:
//下列程式碼執行結果() public static void main(String[] args) throws InterruptedException{ Thread t = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); }catch(InterruptedException e) { throw new RuntimeException(e); } System.out.println("2"); } }); t.start(); t.join(); System.out.println("1"); } //output:2 1
①因為子執行緒t休眠時間太長,因此主執行緒很可能在t執行緒之前結束,然後輸出2 1;
②但是t.join(); 執行緒t呼叫了join方法,所以主執行緒必須等待執行緒t執行結束才接著執行,所以輸出 2 1。