MSDN的解釋:阻塞調用線程,直到某個線程終止時為止。首先明確幾個問題:
1、一個進程由一個或者多個線程組成,線程之間有可能會存在一定的先后關系和互斥關系。多線程編程,首先就是要想辦法划分線程,減少線程之間的先后關系和互斥關系,這樣才能保證線程之間的獨立性,各自工作,不受影響。Google的MapReduce核心思想就是盡量減少線程之間的先后關系和互斥關系。
2、無論如何地想辦法,線程之間還是會存在一定的先后關系和互斥關系,這時候可以使用Thread.Join方法。
3、一個線程在執行的過程中,可能調用另一個線程,前者可以稱為調用線程,后者成為被調用線程。
4、Thread.Join方法的使用場景:調用線程掛起,等待被調用線程執行完畢后,繼續執行。
5、被調用線程執行Join方法,告訴調用線程,你先暫停,我執行完了,你再執行。從而保證了先后關系。
6、考慮一種有意思的情況:在當前線程內調用Thread.CurrentThread.Join() 會出現什么情況?分析:假設當前線程為A,此時調用線程為A,被調用線程也為A,由於調用線程A暫停,被調用線程A(也就是調用線程A)永遠不會執行完畢,造成死鎖。
