【发布时间】:2011-05-18 13:44:39
【问题描述】:
所以这似乎是一个非常常见的用例,也许我想多了,但我在保持来自多个线程的集中度量时遇到了问题。假设我有多个工作线程都在处理记录,并且每 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 。 . .但也许不是。对人们有什么样的想法感兴趣。我曾考虑过使用原子变量并使用 ReeantrantReadWriteLock - 但我真的不希望指标停止处理流程(即指标对处理的影响应该非常小)。谢谢。
【问题讨论】:
标签: java concurrency metrics