首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Java线程池执行器获取调试信息

从Java线程池执行器获取调试信息
EN

Stack Overflow用户
提问于 2018-09-15 07:56:37
回答 1查看 991关注 0票数 3

我有一个相当复杂的软件,它大量使用多线程来计算财务信息,在我的市场交易接近尾声时,我的线程池队列开始膨胀,并增加到系统不再稳定的程度。为了解决这个问题,我需要获得更多关于不同类类型的Runnable的执行时间的数据,或者以某种方式标记那些执行时间超过x秒的。如果我在服务器上为VM分配了过多的内核,导致JVM需要一段时间才能获得一个用于线程执行的内核,我也在尝试了解这一点。

监控队列大小非常简单,但是要获得这些其他指标,我在Java中看不到任何能够实现这一点的API,任何帮助都将不胜感激,这是我最后一个主要的拦截器!

EN

回答 1

Stack Overflow用户

发布于 2018-09-15 08:32:55

有无数的方法可以做到这一点,使用许多不同的库。你可以使用一些AOP方法,或者让Spring插装你的类,使用商业解决方案,等等。

如果您正在寻找一种可以手动实现的简单方法,那么这就是其中之一。

您可以子类化java.util.concurrent.ThreadPoolExecutor并覆盖两个方法:

代码语言:javascript
复制
protected void beforeExecute(Thread t, Runnable r) { }

代码语言:javascript
复制
protected void afterExecute(Runnable r, Throwable t) { }

这些方法在它们的默认实现中不做任何事情,但是正如Javadoc所说,

在给定线程中执行给定Runnable之前调用的

方法。此方法由执行任务{@code r}的线程{@code t}调用,并可用于重新初始化ThreadLocals,或用于执行日志记录

在这些方法中,您可以为Runnables收集自己的计时信息,并将它们记录到一个文件中。

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

https://stackoverflow.com/questions/52340466

复制
相关文章

相似问题

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