理解join

    當主線程想等到子線程執行完以後,再進行主線程的工做。好比子線程在處理一個數據,主線程想要取得這個數據中的值,就要用到join了。join做用是等待線程對象銷燬。
    join與synchronized的區別是,join在內部使用wait方法進行等待,而synchronized關鍵字使用的是"對象監視器"原理作爲同步
    join(millis):若是說join()是無限期了等待。那麼millis就是一個等待期限了,期限已到那麼主線程就再也不等待了,與sleep的區別是,join釋放鎖,而sleep時不釋放鎖
    
    
測試1: java

public static void main(String[] args) throws InterruptedException {
	Thread t = new Thread(){
		public void run() {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("thread end");
		};
	};
	t.start();
	t.join();
	
	System.out.println("main end");
	
}

結果:
thread end
main end 測試

如上,若是說main線程處於interrupt狀態,調用子線程t執行join會拋出InterruptedException 。或說若是mian與t線程已經join了,這時嘗試將main置於interrupt也會拋出InterruptedException 
相關文章
相關標籤/搜索