Назад к вопросам
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;
}
}
Такой подход минимизирует блокировки и обеспечивает высокую производительность при многопоточном доступе.