java吧 关注:1,246,553贴子:12,723,301
  • 3回复贴,共1

[多线程]Thread.join(),深度解析

取消只看楼主收藏回复

上课时讲到了join这个方法,本来是一笔带过的,后来遇到问题没想到问题接踵而至...join()功能大家都知道但是当你看到Java.Thread.join()的源码时你就感觉好困惑,为此我来个深度解析,在多线程里不深度你永远都不会理解其中的真谛.


IP属地:北京1楼2014-10-28 20:35回复
    通过运行一段测试代码

    然后运行结果:
    Hi 0
    Hi 1Hi 2Hi 3Hi 4Hi 5Hi 6Hi 7
    Main is down!
    ----------------------------
    在这个运行结果中我们看到确实是如果join()方法所解释的一样当前线程停止直至调用join()方法的线程运行结束后开始继续执行.当然问题是看到源码之后(可能是我笨吧一直没想到)


    IP属地:北京4楼2014-10-28 20:41
    回复
      通过源码看到
      这个方法是同步不可重写的方法,如果当我们调用了无参数的join方法时,代码将进入if(millis == 0)的代码块里,在这里不停的判断线程是否存活,如果存活将被等待挂起,关键是迷惑在于synchronized关键字修饰,如我们线程B调用join方法将锁住B的,应该B等待,那为什么它还在运行呢,而且主线程等待.


      IP属地:北京5楼2014-10-28 20:46
      回复
        其实在到代码b.join()时,其实是当前线程(main)去调用的join(),嗯,所以直接阻塞main线程,直到调用join()方法的线程死亡,


        IP属地:北京7楼2014-10-28 20:55
        回复