多线程中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自己也是在钻牛角尖,最后得出这个结论,会牢记取心,如果是错的,请指正,感谢!!!!
多线程中join()的更多相关文章
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- [转]Python多线程与多线程中join()的用法
https://www.cnblogs.com/cnkai/p/7504980.html Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知 ...
- Python多线程与多线程中join()的用法
多线程实例 https://www.cnblogs.com/cnkai/p/7504980.html 知识点一:当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时 ...
- Java多线程中join、yield、sleep方法详解
在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...
- 转载:Java多线程中join方法的理解
转载自:http://uule.iteye.com/blog/1101994 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A ...
- 多线程中join()的用法
Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public class TestThread5 { public static void main(String ...
- python多线程中join()方法和setDaemon()方法的区别
""" join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...
- Java多线程中join方法的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join( ...
- 多线程中join方法的含义
1.作用:调用这个方法的时候,主进程会在这里停住,等待该线程进行完毕再继续往下执行. 如:不使用join的情况: <?php class Join extends Thread { public ...
随机推荐
- ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字
在运行以下语句的时候,报错如下: ALTER TABLE PN_POST ADD CONSTRAINT POST_CLOB_FK FOREIGN KEY (POST_BODY_ID) REFERENC ...
- view定位
- Centos查看端口占用情况
Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令: lsof -i tcp:80 列出所有端口 netstat -ntlp 结束进程: kill 进程代码
- HDU2222 Keywords Search —— AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 Keywords Search Time Limit: 2000/1000 MS (Java/O ...
- .net2.0 C# Json反序列化
http://cjl20082002.blog.163.com/blog/static/120827332009511103457637/ 去:http://json.codeplex.com/下载 ...
- 继续servlet理论篇
唉,毕业是件很麻烦的事情,实习也是一件很郁闷的事情,现在公司很注重基础,所以 所以还要看java,不过,我年轻,我有激情.来吧,来着不惧,说这话,有些心虚. HttpServlet类中所提供的doGe ...
- 使用idea导入远程git版本库项目
1.选择git方式导入 2.设置远程git项目地址 3.测试是否连接成功 4.选择yes,检查项目 5.如果有下一步,直接next下去就可以了.
- python 文件与文件夹常见操作以及os.walk的用法
文件操作: In [34]: import os In [35]: os.rename("hello[复件].py","hello111.py") ...
- bzoj 2169 连边——去重的思想
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2169 如果之前都去好重了,可以看作这次连的边只会和上一次连的边重复. 可以认为从上上次的状态 ...
- vijos1842(火柴排队)
描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...