Java Thread.join透彻分析

  • 前言: 之前听到关于Thread.join()的理解最多的是会让主线程等待执行join方法的线程,但是并不明白其中原理,话不多说,直接上源码

  • 源码分析:

    • Thread.join(): join()默认使用0毫秒

      join

    • Thread.join(long millis): mills=0时,会判断isAlive()若为真则一直循环下去,若mills不为0则,在isAlive()为真的条件下循环对应时间
      join millis

    • Thread.isAlive(): 是一个外部调用库函数,从注释可知只要线程执行start()方法则,isAlive为真,若线程执行完毕则为false
      isAlive

    • Thread.start(): 执行该方法会生一个子线程去执行run方法,而当前线程会返回(非阻塞调用)
      start

  • 递进分析
    从查看上述几个方法源码可得知,Join原理,线程sub执行start()之后异步返回,而sub的一个子线程会执行它的run方法,start()返回之后继续执行sub所在线程(主线程)的语句,通过调动join()方法可以迫使主线程等待,这里可能会不理解为什么调用的是sub.join(),会让主线程等待,因为join没有产生子线程也不在run方法中,所以sub.join()实质只是调用了Thread的join方法迫使当前线程等待.
    在这里插入图片描述

  • 总结
    subThread.join会使subThread所属线程等待,直到subThread执行完毕,即isAlive为false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值