gpt4 book ai didi

java - 线程池中的线程状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:36 27 4
gpt4 key购买 nike

我想监控 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 及更高版本)。这意味着我需要知道线程是否处于 Activity 状态,无论容器使用 Executors 框架还是旧线程机制....

最佳答案

你可以使用

for(Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces()) {
if (waitingOnTheRightLine(entry))
checkThreadLocalValues(entry);
}

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

关于java - 线程池中的线程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076020/

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