동시성 문제와 해결방법
동시성 문제가 발생하는 이유는
동일한 자원에 여러 스레드가 동시에 접근했을때 발생하는 문제이다.
이러한 동시성 문제는 지역 변수에서는 발생하지 않는다.
지역 변수는 스레드마다 각각 다른 메모리 영역이 할당되기 때문입니다.
동시성 문제가 발생하는 곳은 같은 인스턴스 필드(주로 싱글톤)
또는 static 같은 공용 필드에 접근할 때 발생한다.
여기서 중요한 점은 값에 무조건 동시에 접근한다고
문제가 발생하는 것이 아니라 값을 어디선가 변경할 때 발생!
즉, 읽기만 한다면 동시성 문제는 발생하지 않는다.
동시성 문제 해결하기 위해서 스레드 로컬을 사용한다.
스레드 로컬은 해당 스레드만 접근할 수 있는 개인 저장소를 의미한다.
ThreadLocal을 모두 사용하고 나면 반드시 ThreadLocal.remove() 를 호출
해서
쓰레드 로컬에 저장된 값을 제거해야 한다.