gpt4 book ai didi

java - 线程卡在 Thread.join() 中,即使其他线程已终止

转载 作者:行者123 更新时间:2023-12-02 09:02:53 25 4
gpt4 key购买 nike

我们的Java应用程序启动一个工作线程(使用Thread.start())。此后不久,它在工作线程上调用Thread.join()。工作线程执行一些操作并终止。第一个线程退出对 join() 的调用并继续其快乐的方式。标准内容:

Thread t = new WorkerThread();
t.start();

// Blah blah

t.join();

class WorkerThread extends Thread {
public void run() {
// Do some stuff
}
}

至少这就是它应该如何工作,以及在我们可以重现的任何情况下它如何工作。然而,我们有一位客户一直遇到麻烦。

使用 PsiProbe 查看线程,他们发现工作线程已创建。它运行一段时间,但一段时间后就会从线程列表中消失。这种情况发生在意外的时间(基于与工作线程相关的其他事件的计时)。主线程永远不会退出 join() 调用。

这似乎破坏了 join() 的契约,并且对我来说意味着某种 JVM 级别的错误。有没有人目睹过这样的行为,或者知道是什么原因导致的?

编辑 3-3-11:

我仍在等待来自客户的结论性数据,但我似乎并不真正知道我认为我知道的事情:主线程可能不会在 join() 中阻塞根本没有,但在它之前的某个时刻。

无论如何,感谢大家的想法。

最佳答案

快速搜索Java Bugs Database没有吐出任何符合您症状的东西。但进行更广泛的搜索是值得的。

<小时/>

但是,值得注意的是,JVM bug 只是众多可能的理论之一(请参阅评论),现阶段几乎没有证据支持任何理论。如果我是你,我会:

  1. 弄清楚客户的平台是什么
  2. 在 Java 错误数据库中搜索任何似乎与观察到的症状(事实上确实如此)相匹配的已知错误。
  3. 如果您发现一个看似“命中”的错误,请进一步评估它,尝试确认这确实是客户的问题,并查看是否有任何方法可以缓解它。
  4. 此外...
    • 看看其他可能的理论;例如见上文
    • 尝试找出客户的安装与其他没有此问题的人相比有何不同
    • 添加更多监控,并尝试让客户使用该版本。

(在最后一个要点上,可能有必要向客户指出显而易见的事情。如果他们希望修复错误,他们可能需要做额外的事情来帮助您追踪错误,例如安装运行“应用程序的实验版”。)

关于java - 线程卡在 Thread.join() 中,即使其他线程已终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com