Java Thread.join透彻分析

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

  • 源码分析:

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

      join

    • Thread.join(long millis): mills=0时,会判断isAlive()若为真则一直循环下去,若mills不为0则,在isAlive()为真的条件下循环对应时间
      Java Thread.join透彻分析_第1张图片

    • Thread.isAlive(): 是一个外部调用库函数,从注释可知只要线程执行start()方法则,isAlive为真,若线程执行完毕则为false
      Java Thread.join透彻分析_第2张图片

    • Thread.start(): 执行该方法会生一个子线程去执行run方法,而当前线程会返回(非阻塞调用)
      Java Thread.join透彻分析_第3张图片

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

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

你可能感兴趣的:(Java)