這個鬼東西百度了很久沒弄明白,大佬們代碼一粘貼好了完事,藉助官方api終因而理解了,固然若是有問題歡迎你們用鍵盤來羞辱我.api
首先 join有什麼用? 他是用來肯定線程什麼時候結束的 ,函數
Thread提供了兩種方法來肯定線程什麼時候結束,isAlive這裏不作闡述,字面意思,字面用法spa
final void join() throws InterruptedExpetion
Oracle官方教程上面關於join是這樣說的,mb大佬寫的太晦澀看不懂
該方法將等待,一直到它調用的線程終止. 它的名字表示調用的線程會一直等待,直到指定的線程加入它.
該容器不會死,一直到容器裏的線程死光. 它的沒死表示肚子裏線程還沒死乾淨,人在塔在;
join的主線程,他們有增強版的鐵索連環效應,join死,主線程死
看不懂我說的啥? 那先看例子,再回來看上面的.
===========================================================================================
例子1://main就是main函數 而且子線程跑的是一個方法體沒東西的方法 , 而後 a和b進入同一個方法
main{
a.start();
b.start();
}
上面的代碼會xjb跑, 順序是這樣的: 主線程開始->主線程結束->a和b(看臉誰先跑)->a和b(看臉誰先死);
若是連這個爲何都不知道,兄弟對不起我這篇不適合你看下去
===========================================================================================
例子2
main{
a.start();
a.join
b.start();
}
例子2的線程執行順序:
主線程開始->線程a開始->線程a結束->主線程結束->線程b開始->線程b結束;
由於a線程 和 b線程 進入了同一個方法,可是a 在start後使用join,那麼b會老老實實的等a先跑完,a不給b進房;
(a進容器了,join就是容器,a死了,join死了,帶走主線程)
===========================================================================================
例子3
main{
a.start();
b.start();
a.join();
}
例子3的執行順序:
主線程開始->a 和 b 看臉誰先開始 ->a 和 b 看臉誰先死 -> 若是是a先死,那麼主線程終止,b繼續跑,跑完死;
|->若是是b先死,那麼a繼續跑,跑完a死,主線程死;
a線程開始跑方法了,而後僅接着,b線程也進入方法了,在這以後,a線程才調用jion方法,人家b線程又沒出來,因此
他倆一塊兒在房裏面跑,這時候就體現join的做用了, 由於a調用了join(),因此只要a出來了(表示a線程結束),主線
程就結束;
b無論它在不在房間裏,也無論b是否是早就出來了, 都和主線程無關; 他們沒有一點聯繫.可是join和主線程有一個鐵
索連環增強版;
(一樣 a死了,join容器死了,主線程死了)
===========================================================================================
PS:
就子線程和主線程,或者說是線程和線程之間,他們自己就是沒有任何聯繫的,你走你的我走個人,當它們發生矛盾了就須要咱們
這種造物主來管理他們,
使用各類各樣的方法來讓他們有聯繫,讓它們有高貴低賤,有先有後;
主線程和子線程,在主線程中建立子線程,但我不理解爲主線程是子線程的載體,就好像170的父親有了個180的孩子;
它們是同級的,有獨立個體,只是做用不相同;
join方法的做用就是,調用它的線程終止,則主線程一塊兒死;(join是容器,肚子裏的線程死,容器死,帶走主線程,容器外的該幹啥幹啥)
由於:每一個線程都是獨立的個體
===========================================================================================
再說說其餘例子
例子4
main{
a.start();
a.join();
b.start();
b.join();
}
例子4的執行順序:主線程開始->線程a開始->線程a結束->線程b開始->線程b結束->主線程關閉
join是一個容器,它裏面存放着線程a和線程b,他倆不死光,主線程不死. 他倆死,無論容器外面還有沒有其餘線程,主線程都死===========================================================================================我的理解,有錯歡迎你們評論,關於join本身也是在鑽牛角尖,最後得出這個結論,會牢記取心,若是是錯的,請指正,感謝!!!!