java - 如何使用 ExecutorService 跟踪任务执行统计信息?

标签 java concurrency statistics monitoring

我正在使用 ExecutorService 启动任务,分派(dispatch)需要按任务特定标准分组的任务:

Task[type=a]
Task[type=b]
Task[type=a]
...

我想定期输出每个任务花费的平均时间长度(按 type 分组)以及平均/中位数和标准差等统计信息。

当然,这需要非常快,理想情况下不应导致各个线程在报告统计信息时同步。执行此操作的良好架构是什么?

最佳答案

ThreadPoolExecutor提供 beforeExecuteafterExecute您可以覆盖的方法。您可以使用它们在单个(ExecutorService 的成员变量)中记录您的统计信息 ConcurrentHashMap键入任务的一些唯一标识符,并存储类型、开始时间和结束时间。

当您准备好查看它们时,从 ConcurrentHashMap 计算统计数据。

关于java - 如何使用 ExecutorService 跟踪任务执行统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/923033/

相关文章:

java - Spring:java.io.NotSerializedException:MapSqlParameterSource

go - 在读取和修改之前锁定 slice

haskell - 通过并发提高仿真性能

java - 如何在一个线程中发生异常后停止可调用线程进程?

python - 如何简化 python 中分布的列表理解

java - Java 中的日期和时间比较

java - 为什么我的 Firebase addvalueEventlistener 不会被调用?

linux - pcap 的替代品 (Linux)

r - 如何在R中使用对数刻度作为直方图的y轴?

java - (Java) 纸牌游戏逻辑