작성
·
84
0
Thread local을 사용할 때 사용 후 반드시 remove를 해줘야 하는 이유는 알았습니다.
그럼 만약 userA가 remove를 했고, 그 다음 userB가 우연히 threadA를 통해 get 요청을 한다면 userA가 remove를 했기 때문에 null이 반환되는 것 아닌가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
네, 맞습니다. ThreadLocal
을 사용할 때, 한 스레드에서 사용한 데이터를 remove
메소드를 통해 명시적으로 제거해주지 않으면, 스레드가 재사용될 때 이전에 사용했던 데이터가 그대로 남아 있어 예상치 못한 상황이 발생할 수 있습니다. 따라서, 사용이 끝난 후에는 반드시 remove()
를 호출해주어야 합니다.
userA가 remove()
를 호출하여 ThreadLocal
에 저장된 데이터를 제거했다면, userB가 같은 스레드(threadA
)를 사용하여 get()
요청을 하게 될 경우, ThreadLocal
변수는 초기화 된 상태(즉, null
이나 기본값)를 반환하게 됩니다. 이는 ThreadLocal
이 각 스레드에 대해 별도의 변수 복사본을 유지하기 때문에 발생하는 특성입니다. 그렇기 때문에 각 사용자의 요청 처리가 완전히 독립적이라는 점이 ThreadLocal
의 중요한 특징 중 하나입니다.
사용 후에는 반드시 remove()
를 호출해주어, 스레드 풀 환경에서 발생할 수 있는 잠재적인 메모리 누수 문제나 데이터 오염을 방지해야 합니다.