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

Chr*_*s R 9 java statistics concurrency monitoring

我正在使用ExecutorService启动任务,调度需要按任务特定条件分组的任务:

Task[type=a]
Task[type=b]
Task[type=a]
...
Run Code Online (Sandbox Code Playgroud)

我想定期输出每个任务所用的平均时间长度(按分组type)以及统计信息,如平均值/中位数和标准差.

当然,这需要非常快,理想情况下不应该在报告统计信息时导致各个线程同步.这样做有什么好的架构?

Ada*_*icz 10

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

ConcurrentHashMap您准备好查看它们的时间开始计算统计数据.