Sobes.tech
Назад к вопросам
Senior
6

Задача по многопоточности: thread-safe сборщик метрик с эффективным инкрементом, ключ — строка, значение — счётчик

Компании, где спрашивали
РТК ИТ

Ответ от нейросети

sobes.tech AI

Для thread-safe сборщика метрик с ключом-строкой и значением-счетчиком в Java можно использовать ConcurrentHashMap<String, AtomicLong>.

  • ConcurrentHashMap обеспечивает конкурентный доступ без блокировок на уровне всей карты.
  • AtomicLong позволяет эффективно и атомарно инкрементировать счетчик.

Пример реализации:

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

public class MetricsCollector {
    private final ConcurrentHashMap<String, AtomicLong> counters = new ConcurrentHashMap<>();

    public void increment(String key) {
        counters.computeIfAbsent(key, k -> new AtomicLong()).incrementAndGet();
    }

    public long getCount(String key) {
        AtomicLong count = counters.get(key);
        return count != null ? count.get() : 0L;
    }
}

Такой подход минимизирует блокировки и обеспечивает высокую производительность при многопоточном доступе.