多线程中join()

 

这个鬼东西百度了很久没弄明白,大佬们代码一粘贴好了完事,借助官方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本身也是在钻牛角尖,最后得出这个结论,会牢记取心,若是是错的,请指正,感谢!!!!
相关文章
相关标签/搜索