1. 程式人生 > >Java執行緒的join方法

Java執行緒的join方法

  • 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。