Back to questions
Газпромбанк
Junior — Middle
62
Может ли возникнуть проблема при использовании @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();
}
}