Мне нужен счетчик типа long
со следующими требованиями/фактами:
- Приращение счетчика должно занимать как можно меньше времени.
- Счетчик будет записываться только одним потоком.
- Чтение с счетчика будет выполнено в другом потоке.
- Счетчик будет регулярно увеличиваться (до нескольких тысяч раз в секунду), но будет читаться только раз в пять секунд.
- Точная точность не является существенной, только приблизительное представление о размере счетчика достаточно хорошее.
- Счетчик никогда не очищается, уменьшается.
Основываясь на этих требованиях, как бы вы решили реализовать свой счетчик? Как простой long
, как volatile long
или используя AtomicLong
? Почему?
На данный момент у меня есть volatile long
, но мне было интересно, будет ли другой подход лучше. Я также увеличиваю свое время, выполняя ++counter
, а не counter++
. Действительно ли это действительно более эффективно (как меня верили в другое место), потому что не выполняются задания?
Заранее спасибо
Рич