Sobes.tech
Назад к вопросам
Junior — Middle
74

Какие методы и инструменты вы бы применили для создания потокобезопасного счетчика?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

Для создания потокобезопасного счетчика в Java можно использовать несколько подходов:

  1. Класс AtomicInteger из пакета java.util.concurrent.atomic. Он предоставляет атомарные операции, такие как incrementAndGet(), которые гарантируют корректное обновление значения счетчика в многопоточной среде без необходимости явной синхронизации.
import java.util.concurrent.atomic.AtomicInteger;

public class SafeCounter {
    private AtomicInteger counter = new AtomicInteger(0);

    public int increment() {
        return counter.incrementAndGet();
    }

    public int get() {
        return counter.get();
    }
}
  1. Синхронизация с помощью ключевого слова synchronized. Можно сделать методы инкремента и получения значения синхронизированными, чтобы обеспечить эксклюзивный доступ:
public class SafeCounter {
    private int counter = 0;

    public synchronized int increment() {
        return ++counter;
    }

    public synchronized int get() {
        return counter;
    }
}
  1. Использование LongAdder — более эффективен при высокой конкуренции потоков, так как снижает блокировки.

Выбор зависит от конкретных требований: для простоты и хорошей производительности обычно достаточно AtomicInteger.