首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程被困在Thread.join()中,即使其他线程已经终止

线程被困在Thread.join()中,即使其他线程已经终止
EN

Stack Overflow用户
提问于 2011-03-01 02:50:50
回答 1查看 1K关注 0票数 3

我们的Java应用程序启动一个工作线程(使用Thread.start())。此后不久,它在工作线程上调用Thread.join()。工作线程做一些事情并终止。第一个线程退出对join()的调用并继续其愉快的过程。标准材料:

代码语言:javascript
复制
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()中根本没有阻塞,而是在它之前的某个点。

不管怎么说,都要感谢你的想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-01 03:10:30

快速搜索Java Bugs数据库没有吐出任何符合你症状的东西。但这是值得你做更广泛的搜索。

但是,值得注意的是,JVM错误只是许多可能的理论中的一种(参见注释),在这个阶段几乎没有证据支持任何理论。如果我是你,我会:

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

(在最后一个要点上,可能有必要向客户指出显而易见的问题。如果他们想修复这个bug,他们可能需要做一些额外的工作来帮助您跟踪这个bug,比如安装一个“实验性”版本的应用程序。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5149999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档