多線程中join()


 

這個鬼東西百度了好久沒弄明白,大佬們代碼一粘貼好了完事,借助官方api終於是理解了,當然如果有問題歡迎大家用鍵盤來羞辱我.

首先  join有什么用?   他是用來確定線程何時結束的 ,

Thread提供了兩種方法來確定線程何時結束,isAlive這里不做闡述,字面意思,字面用法

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自己也是在鑽牛角尖,最后得出這個結論,會牢記取心,如果是錯的,請指正,感謝!!!!
          

                                        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM