Junior — Middle
Birden fazla müşteri aynı anda istek gönderdiğinde, @RestController ile bir sayıcı kullanırken sorun çıkabilir mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Да, может возникнуть проблема с состоянием счетчика при одновременных запросах от множества клиентов, если счетчик хранится как обычная переменная в контроллере.
@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();
}
}