这个鬼东西百度了好久没弄明白,大佬们代码一粘贴好了完事,借助官方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()的更多相关文章

  1. python多线程中join()的理解

    在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...

  2. [转]Python多线程与多线程中join()的用法

    https://www.cnblogs.com/cnkai/p/7504980.html Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知 ...

  3. Python多线程与多线程中join()的用法

    多线程实例 https://www.cnblogs.com/cnkai/p/7504980.html 知识点一:当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时 ...

  4. Java多线程中join、yield、sleep方法详解

    在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...

  5. 转载:Java多线程中join方法的理解

    转载自:http://uule.iteye.com/blog/1101994 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A ...

  6. 多线程中join()的用法

    Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public class TestThread5 { public static void main(String ...

  7. python多线程中join()方法和setDaemon()方法的区别

    """ join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...

  8. Java多线程中join方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join( ...

  9. 多线程中join方法的含义

    1.作用:调用这个方法的时候,主进程会在这里停住,等待该线程进行完毕再继续往下执行. 如:不使用join的情况: <?php class Join extends Thread { public ...

随机推荐

  1. go网关

    package main import ( "flag" "fmt" "io" "net" "os" ...

  2. ElasticSearch(十三) bulk api奇特的json格式的原因

    bulk api的语法 正常的语法: {"action": {"meta"}}\n {"data"}\n {"action&quo ...

  3. 点击文本选中checkbox

    <checbox文本编辑/>      : 只点击checkbox时,才可以选中,点击文本时无法选中 <label><checbox文本编辑/></label ...

  4. contentprovider 实例

    Provider端 public class PersonProvider extends ContentProvider { //用来存放所有合法的Uri的容器 private static Uri ...

  5. CoreGraphics(转)

    2.CoreGraphics 上面我们讲过,UIBezierPath是CoreGraphics的封装,使用它可以完成大部分的绘图操作,不过更底层的CoreGraphics更加强大. CoreGraph ...

  6. codeforces A. Point on Spiral 解题报告

    题目链接:http://codeforces.com/problemset/problem/279/A 题目意思:给出一个坐标点(x, y),问当从(0, 0) 开始到达该点转过的拐角有多少个.(拐角 ...

  7. linux应用之Mongodb的安装及配置(centos)

    Mongodb是一种nosql类型的数据库,高性能.易部署.易使用的特点在IT行业非常流行. 下面介绍一下mongodb的安装方式,这里我们是在linux下安装,使用的是centos6.4 64位的, ...

  8. 如何创建WindowsService

    创建Windows Service可分为以下几步: 1. 创建一个“Windows Service”项目 2. 设置服务的相关属性,以确定服务的名称及工作机制 属性 设置 ServiceName 服务 ...

  9. 003 - 修改Pycharm的项目文件树样式

    相信习惯了Eclipse或者Windows的小伙伴对于Pycharm的目录树一定觉得特别别扭 因为它总是在文件前加一个三角形标注, 这样的标注在视觉上十分误导层级关系 修改的方式为   File -& ...

  10. BZOJ_2850_巧克力王国_KDTree

    BZOJ_2850_巧克力王国_KDTree Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜 欢过于甜的巧克力.对于每一块 ...