我想监视在Java环境中的外部库中使用的线程池。
可以在我自己的代码中定义的像ExecuterService这样的池对象上添加监视逻辑。 但是在许多情况下,库中声明的池是封装的,因此用户无法访问。 我需要不断检查库池消耗的资源,以使程序稳定。
我要监视的功能是池的名称,大小,当前使用情况(例如活动线程数等)。
谢谢。
答案 0 :(得分:0)
您可以做的是创建一个自定义ThreadGroup,并使该默认线程组成为您的线程。自定义线程组的优点是,在创建或销毁线程时会通知它,并且您可以获取创建线程的库的堆栈跟踪。
要直接监视ThreadPoolExecutor,您需要修改此类或使用工具将代码注入其中。
将代码注入库中的可能性更大,例如通过反编译创建池并修改它的类。
另一个选择是可以通过反射获取ExecutorService。