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

執行緒join方法的理解

一個偶然機會,又接觸到執行緒的join方法了。它的確切含義是什麼呢?總感覺對它的理解還不是很順,疙疙瘩瘩的。

網上搜搜看?

沙裡淘金地找到了這個簡明扼要的解釋。原文(http://blog.csdn.net/wistronits/archive/2005/12/19/556035.aspx),轉載(http://hi.baidu.com/magiccode/blog/item/09deb60f0eaea9edab6457a2.html/cmtid/b8b5a545479d1d2ecffca3ca)。 

試了給出的例子後,join方法的含義明白了。可從英語角度來看,這跟方法名“join”的含義有什麼聯絡呢?

於是,又回讀的Java的經典教材《Thinking In Java》。 看到了這麼句話:

If a thread calls t.join( ) on another thread t, then the calling thread is suspended until the target thread t finishes (when t.isAlive( ) is false). 。 

這樣,“join”英文義也就聯絡起來了。 

再往下想,是什麼原因造成了對join方法理解的不順呢?  是“t.join”這樣主謂結構。

一般來說,一個物件呼叫其方法時,是有主謂關係的, 如aThread.wait()方法呼叫後,執行緒athread就wait了。 按這個主謂關係來理解aThread.join()會是什麼意思呢?

aThread去join誰?當前執行緒?好像是aThread停下來而等當前執行緒完成後,再“手拉手地往下走”。 聯絡上面部落格中的例子和ThinkingInJava中的描述,我們知道,是當前執行緒停下來等aThread完事後,當前執行緒執行下面的statement.

這樣一翻思考後,有了想給join改名的想法:能否把“join”改為“joinedBy”,這樣詞不達意的問題就圓過去了。 如果非要加個引數來表示join動作發起的主語的話那就這樣:aThread.joinedBy(anotherThread). 當然這個anotherThread可以省略而由JVM來自動加上。 

這樣理解起來順暢多了。 

“風吹著楊柳,唰啦啦啦啦啦, 小河裡水流, 嘩啦啦啦啦啦.....”