Мне нужно реализовать сбор статистики глобального объекта для веб-сервера. У меня есть Статистика
singleton, который имеет метод 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, потому что считаю, что это будет быстрее, чем простая синхронизированная
. Есть ли другой / лучший способ реализовать это?