多线程中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 ...
随机推荐
- EasyDarwin开源流媒体云平台VS调试断点提示“还没有为该文档加载任何符号”的解决办法
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52063666 近日,我们EasyDarwin ...
- java socket InputStream和OutputStream
从java socket对象获取的InputSteam的read方法其实是对linux的recv()函数的调用,OutputStream也同理. 也就是说,InputStream和OutputStre ...
- jQuery局部动态刷新
AJAX 是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新. 在做项目的过程当中要用到jQuery动态刷新获取数据,上网查了一番教程,讲此知识点的教程很多,但个人感觉比较乱 ...
- html body div height: 100%;
最近做了测试 html{ height: 100%;//全部内容高度,包括滚动出现的内容 background-color:#000;} body{height: 100%;//只一页屏幕,用作滚动的 ...
- LightOJ1234 Harmonic Number —— 分区打表
题目链接:https://vjudge.net/problem/LightOJ-1234 1234 - Harmonic Number PDF (English) Statistics Foru ...
- Codeforces Round #374 (Div. 2) B. Passwords —— 基础题
题目链接:http://codeforces.com/contest/721/problem/B B. Passwords time limit per test 2 seconds memory l ...
- SqlServer--学习触发器
触发器是一种特殊的存储过程,一种不能被显式执行,而必须依附于一个事件的过程 主要作用:自动化操作;减少手动操作以及出错的几率. 触发器分类:DML(Data Manipulation Language ...
- mongodb压缩——snappy、zlib块压缩,btree索引前缀压缩
MongoDB 3.0 WiredTiger Compression and Performance One of the most exciting developments over the li ...
- [原创]Java开发在线打开编辑保存Word文件(支持多浏览器)
Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 1. 下载PageOffice开发包:http://www.zhuo ...
- System.exit(0);和finish();,push原理
今天师姐问我安卓后台的问题,想起几年前做进制转换的时候特意研究了一下怎么才能「不驻留内存地退出」.虽然Android不推荐用户手动关闭进程,但是在那个内存捉襟见肘的年代,不得不考虑内存. 首先直接按b ...