首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程池中的线程状态

线程池中的线程状态
EN

Stack Overflow用户
提问于 2012-01-31 15:40:48
回答 2查看 1.7K关注 0票数 3

我想监控ThreadLocals中的内存泄漏。要获取所有线程本地对象,我使用此处的http://blog.igorminar.com/2009/03/identifying-threadlocal-memory-leaks-in.html中的代码。这段代码使用反射来提取当前线程上的所有线程局部变量。

我想要一个后台线程,监测所有线程。

它很容易在所有线程上运行(ThreadGroup上的递归调用)。但是,我需要知道哪些线程当前没有运行,并且仍在使用线程本地对象。

例如:线程A使用LocalThread A1。在线程完成并返回到容器的线程池后,应该释放A1。线程M是我的监控线程。它遍历所有线程,并找到线程A。因此,它需要知道A当前是否因为上下文切换而不在运行(在这种情况下,A1不是泄漏),或者A当前不在运行,因为它被返回到池中。

如何区分这两种情况?

顺便说一句,我的监控类需要支持任何平台(应用服务器,web服务器,标准java,任何供应商,java版本1.5及以上)。这意味着我需要知道线程是否处于活动状态,无论容器使用的是执行器框架还是旧的线程机制……

EN

回答 2

Stack Overflow用户

发布于 2012-01-31 16:59:50

您可以使用

代码语言:javascript
复制
for(Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces()) {
    if (waitingOnTheRightLine(entry))
        checkThreadLocalValues(entry);
}

这将检测线程所在的确切行,以检查其未运行和在已知点的等待。

票数 3
EN

Stack Overflow用户

发布于 2012-01-31 15:52:12

示例代码,希望它能有所帮助:

代码语言:javascript
复制
    Thread t = getYourThread();
    if(t.getState() != Thread.State.RUNNABLE)  {
       //currently the thread is not running...
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9076020

复制
相关文章

相似问题

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