两个线程(t1和t2)正在运行。 t1在t2上调用join。假设t2因某些异常而死,那么等待线程t1的行为是什么,即线程t1将无限期地保持在阻塞状态,或者在一段时间后恢复到可运行状态......不清楚关于行为,更具体地说是背后的基本原理。
答案 0 :(得分:1)
JavaDoc必须说Thread.join(long):
此实现使用this.wait调用
this.isAlive
的循环。当线程终止时,将调用this.notifyAll
方法。
这是Thread.isAlive()的描述:
测试此线程是否存活。如果一个线程已经启动并且还没有死亡,那么它就是活着的。
您可以假设保护Thread的实现免受run()
方法内发生的异常的影响。因此,在任何情况下,当run方法终止时(无论是否正常或由于异常),等待join()
的其他线程可以继续。
至于理由:当然,这是因为你的程序不会陷入无休止的等待状态。
答案 1 :(得分:0)