java 线程的join_多线程中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自己也是在钻牛角尖,最后得出这个结论,会牢记取心,如果是错的,请指正,感谢!!!!
java 线程的join_多线程中join()相关推荐
- 【python教程】对多线程中join()的详细教程
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 一. 当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- 基于Java线程池读取数据库中数据(学习+运用)
基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- java join yield_Java多线程中join、yield、sleep方法详解
在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...
- Java多线程中join方法详解
join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAli ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java 线程 并发_多线程高并发编程总结
多线程 第一章 一.终止线程的三种方法: 1.使用退出标志,是县城正常退出,也就是当run方法完成后线程终止. 2.stop不推荐 3.使用interrupt(打了一个停止标记,并不是真的停止线程). ...
最新文章
- 如何使用Coded UI Test对Webpage进行自动化测试
- Java开发必会的Linux命令
- 从零开始学习python-从零开始学习python(一)
- Java虚拟机详解(四)------垃圾收集器
- C++11新特性decltype
- 面试题解(3):SQL
- 回归树与基于规则的模型(part4)--基于规则的模型
- HTML文件上传与下载
- 教你打入clr内部: 配置windows上的windbg,linux上的lldb
- Fiddler抓包-只抓APP的请求
- 小 M 的算式(dfs)
- python计时器timeit返回秒数_一日一技:Python中的timeit()方法
- 计算机专业务必学好的基本课程
- 2020ISSCC 基于SRAM的存内计算15.5阅读记录
- 白鹭(egret)搜素引擎入门
- 企业为什么选择软件定制开发?
- originos系统和鸿蒙系统哪个好用,originos系统适配机型_originos系统更新名单
- 前端必会面试题,往死里背吧
- ps中海报设计的设计思路
- faile什么意思_fail是什么意思_fail在线翻译_英语_读音_用法_例句_海词词典
热门文章
- 每日一题(易错):哪些REPEAT_INTERVAL参数能够实现每30分钟运行job
- 频发:故障排除之又见 ORA-4031丨云和恩墨技术通讯
- 不会SQL注入,连漫画都看不懂了
- 第三方测评:GaussDB(for Redis)稳定性与扩容表现
- CANN 5.0硬核技术抢先看
- 一文总结GaussDB通信原理知识
- 介绍一种更方便的代理池实现方案
- 野生前端的数据结构练习(9)冒泡排序,选择排序,插入排序
- 魅族mx四核即将使用android,魅族MX四核智能手机发布
- android file isdirectory,android – 为什么我不能在Environment.DIRECTORY_PICTURES中创建一个目录?...