인프런 커뮤니티 질문&답변
PropertyEditor non thread-safe 한 이유
작성
·
470
0
안녕하십니까
한가지만 여쭤봐도 될까요?
제가 기초가 부족해서 갑자기 이부분이 헷갈리더라고요 죄송합니다
강의를 보던중에 PropertyEditor는 non thread-safe라서 변수를 공유하기 때문에 값이 달라질수 있다고 하셔서(싱글톤이라 그런가요?) 궁금증이 생겼는데
스프링에서 단순 클래스에서 변수를 사용하는 것은 공유를 안하나요?
ex) public class Test{
int i = 1;
...
}
스프링에서 여러명이 동시에 클래스 또는 함수를 사용해서 i 값을 변경해도 해당 사용자는 독립적으로 i 값을 참고하나요?
답변 1
0
백기선
지식공유자
안녕하세요. 좋은 질문 감사합니다.
당연히 int i 라는 값도 여러 쓰레드가 동시에 사용할 때 멀티 스레드에 안전한 변수가 아닙니다. 즉, 값이 막 다른 쓰레드에서 변경한 값으로 바뀔 수가 있다는 말이죠. 그래서 싱글톤으로 사용할 클래스에 있는 변수들은 쓰레드 세이프한 방법으로 쓰거나, 태초부터 여러 쓰레드에서 동시에 써도 안전한 인스턴스만 써야 합니다.
PropertyEditor는 보여주신 예제처럼 여러 쓰레드에서 공유하는 변수가 생기기 때문에 멀티 쓰레드 환경에서 안전하지 않은 겁니다. 그 대안으로 권장해 드린, Formatter는 저렇게 공유하는 데이터 자체가 없기 때문에 멀티쓰레드 환경에서 써도 안전한 거구요.






답변감사합니다.
"여러 쓰레드에서 동시에 써도 안전한 인스턴스만 써야 합니다"
이 부분만 조금 더 설명해 주실수 있으신가요?