난 아주 간단한 웹 서비스가 있다고 가정 해 봅시다. 단 하나의 태스크는 엔드 포인트가 호출 된 횟수를 세는 것입니다. 엔드 포인트는 /hello
입니다.메소드에 대한 동시 호출 수 계산
@Controller
public class HelloController {
private int calls = 0;
@RequestMapping("/hello")
public String hello() {
incrementCalls();
return "hello";
}
private void incrementCalls() {
calls++;
}
}
지금이 한 두 사용자가 동시에 같은 시간에 /hello
를 호출하지 않는 한 모든 잘 작동합니다. 그러나 /hello
에 대한 병렬 호출이 발생하면 calls
변수는 한 번만 증가합니다 (잘못 입력하지 않은 경우). 그래서 분명히 어떤 종류의 동기화가 여기서 일어날 필요가 있습니다.
이 방법을 스레드로부터 안전하게 만드는 가장 좋은 방법은 무엇이 있을까요?
'int' 대신'java.util.concurrent.atomic.AtomicInteger'를 사용하십시오. – Jesper
콜 카운트에 원자 원 또는 정수를 추가하면 문제가 없습니다. 그렇지 않으면 잠금으로 통화 횟수 변수를 보호하십시오. –
관련 항목 : https://stackoverflow.com/questions/16795303/must-spring-mvc-classes-be-thread-safe – assylias