Sobes.tech
Back to questions
Junior — Middle
61

Может ли возникнуть проблема при использовании @RestController с счетчиком в одном Endpoint, когда множество клиентов отправляют запросы одновременно?

Companies where asked
ГазпромбанкГазпромбанк

Answer from AI

sobes.tech AI

Да, может возникнуть проблема с состоянием счетчика при одновременных запросах от множества клиентов, если счетчик хранится как обычная переменная в контроллере.

@RestController в Spring по умолчанию является singleton, то есть один экземпляр на все запросы. Если счетчик — это поле класса, то при параллельном доступе без синхронизации возможны состояния гонки (race conditions), что приведет к некорректному подсчету.

Чтобы избежать этой проблемы, нужно использовать:

  • Потокобезопасные типы данных, например, AtomicInteger.
  • Синхронизацию доступа к счетчику (synchronized, ReentrantLock).
  • Хранение состояния вне контроллера, например, в базе данных или кэше с поддержкой атомарных операций.

Пример с AtomicInteger:

@RestController
public class CounterController {
    private AtomicInteger counter = new AtomicInteger(0);

    @GetMapping("/count")
    public int increment() {
        return counter.incrementAndGet();
    }
}