这似乎是一个非常普遍的使用案例,也许我想多了,但我在处理来自多个线程的集中度量时遇到了问题。假设我有多个工作线程正在处理记录,并且每处理1000个记录我都想输出一些指标。现在,我可以让每个线程记录单独的指标,但是要得到吞吐量数字,我必须手动将它们加起来(当然时间边界不会完全相同)。以下是一个简单的例子:
public class Worker implements Runnable {
private static int count = 0;
private static long processingTime = 0;
public void run() {
while (true) {
...get record
count++;
long start = System.currentTimeMillis();
...do work
long end = System.currentTimeMillis();
processingTime += (end-start);
if (count % 1000 == 0) {
... log some metrics
processingTime = 0;
count = 0;
}
}
}
}
希望这有些意义。我知道这两个静态变量可能是AtomicInteger和AtomicLong,但也可能不是。我对人们的想法很感兴趣。我曾考虑过使用原子变量并使用ReentrantReadWriteLock,但我真的不希望指标停止处理流程(即指标对处理的影响应该非常小)。谢谢。