我需要为 Web 服务器实现全局对象收集统计信息。我有Statistics
单例,它有方法addSample(long sample)
,随后调用updateMax
. 这显然必须是线程安全的。我有这种方法可以更新整个统计信息的最大值:
AtomicLong max;
private void updateMax(long sample) {
while (true) {
long curMax = max.get();
if (curMax < sample) {
boolean result = max.compareAndSet(curMax, sample);
if (result) break;
} else {
break;
}
}
}
这个实现正确吗?我正在使用 java.util.concurrent,因为我相信它会比 simple 更快synchronized
。有没有其他/更好的方法来实现这个?