Проверяет знание thread-safe подходов для атомарных операций.
Используйте AtomicLong для CAS-операций, synchronized для блокировок или LongAdder при высокой конкуренции. В распределенных системах — Redis INCR или SQL UPDATE table SET counter = counter + 1.
Варианты реализации:
AtomicLong (неблокирующий):
private AtomicLong viewCount = new AtomicLong(0);
void increment() {
viewCount.incrementAndGet(); // Атомарный CAS
}LongAdder (высокая конкуренция):
private LongAdder adder = new LongAdder();
void increment() {
adder.increment(); // Распределяет нагрузку между ячейками
}База данных (распределенные системы):
UPDATE page_views SET count = count + 1 WHERE page_id = 'home';Почему не volatile?
private volatile long counter; // Недостаточно!
counter++; // Не атомарная операция (читает + инкремент + пишет)Вывод: Для локальных счетчиков используйте LongAdder, для распределенных — БД/Redis.