Java Thread.join透彻分析 - Go语言中文社区

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013429752/article/details/86398986
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-25 01:10:19
  • 阅读 ( 1012 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢