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并发:线程池的使用

《Java并发编程实战》笔记-取消与关闭

java并发 day05 ThreadPoolExecutorJUC

java并发 day05 ThreadPoolExecutorJUC

java并发 day05 ThreadPoolExecutorJUC