java线程中的并发[关闭]
Posted
技术标签:
【中文标题】java线程中的并发[关闭]【英文标题】:Concurrency in java threads [closed] 【发布时间】:2013-11-28 07:26:26 【问题描述】:两个线程(t1 和 t2)正在运行。 t1 在 t2 上调用 join 。假设 t2 由于某些异常而死,那么等待线程 t1 的行为将是什么,即线程 t1 将无限期地保持在阻塞状态还是会在一段时间后恢复到可运行状态...不清楚关于行为,更具体地说是其背后的理由。
【问题讨论】:
你可以轻松尝试一下。 欢迎来到 ***。请阅读***.com/about 的关于页面 - 在那里您可以阅读一些关于提问的简单规则;其中之一是:“不要问你没有试图找到答案的问题(展示你的作品!)”。所以,在未来,请先尝试自己寻找答案(例如尝试并阅读 API 文档)。然后创建问题并告诉我们您做了什么(例如,阅读和尝试)以及为什么它没有解决您的问题/问题(例如,文档无法理解,测试的行为符合预期)。 【参考方案1】:JavaDoc 必须对Thread.join(long) 说:
此实现使用以
this.isAlive
为条件的 this.wait 调用循环。当一个线程终止时,this.notifyAll
方法被调用。
这是Thread.isAlive()的描述:
测试这个线程是否还活着。如果线程已启动且尚未死亡,则该线程处于活动状态。
您可以假设 Thread 的实现受到保护,不会在 run()
方法内发生异常。所以无论如何,当run方法终止时(不管是正常还是因为异常),其他等待join()
的线程都可以继续。
至于理由:这当然是为了让您的程序不会陷入无休止的等待状态。
【讨论】:
【参考方案2】:来自the javadoc:
等待此线程终止。
所以,当线程死亡时,join()
返回。
【讨论】:
以上是关于java线程中的并发[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java并发 day05 ThreadPoolExecutorJUC