【问题标题】:Concurrency in java threads [closed]java线程中的并发[关闭]
【发布时间】:2013-11-28 07:26:26
【问题描述】:

两个线程(t1 和 t2)正在运行。 t1 在 t2 上调用 join 。假设 t2 由于某些异常而死,那么等待线程 t1 的行为将是什么,即线程 t1 将无限期地保持在阻塞状态还是会在一段时间后恢复到可运行状态...不清楚关于行为,更具体地说是其背后的理由。

【问题讨论】:

  • 你可以轻松尝试一下。
  • 欢迎来到 StackOverflow。请阅读stackoverflow.com/about 的关于页面 - 在那里您可以阅读一些关于提问的简单规则;其中之一是:“不要问你没有试图找到答案的问题(展示你的作品!)”。所以,在未来,请先尝试自己寻找答案(例如尝试并阅读 API 文档)。然后创建问题并告诉我们您做了什么(例如,阅读和尝试)以及为什么它没有解决您的问题/问题(例如,文档无法理解,测试的行为符合预期)。

标签: java concurrency


【解决方案1】:

JavaDoc 必须对Thread.join(long) 说:

此实现使用以this.isAlive 为条件的 this.wait 调用循环。当一个线程终止时,this.notifyAll 方法被调用。

这是Thread.isAlive()的描述:

测试这个线程是否还活着。如果线程已启动且尚未死亡,则该线程处于活动状态。

您可以假设 Thread 的实现受到保护,不会在 run() 方法内发生异常。所以无论如何,当run方法终止时(不管是正常还是因为异常),其他等待join()的线程都可以继续。

至于理由:这当然是为了让您的程序不会陷入无休止的等待状态。

【讨论】:

    【解决方案2】:

    来自the javadoc

    等待此线程终止。

    所以,当线程死亡时,join() 返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多