스프링프레임워크를 사용하다보면 멤버변수를 선언해서 여러메서드에서 활용하도록 구현하는 개발자들을 종종 볼 수 있다.
스프링빈은 싱글톤으로 생성되기때문에,
멀티쓰레드 환경에서 싱글톤의 멤버변수를 각 쓰레드들이 쓰고 지우고 하다보면 데이터가 엉켜서 버그를 유발하는 원인이 될 수 있다.
ThreadLocal은 해당 쓰레드만이 접근할 수 있는 저장소를 말한다.
각 쓰레드마다 별도의 내부 저장소를 갖게되며, 같은 인스턴스의 ThreadLocal 멤버변수를 다른 쓰레드가 접근해도 문제가 발생하지 않는다.
사용방법
ThreadLocal<String> nameStore = new ThreadLocal<>();
주의사항
해당 쓰레드가 ThreadLocal을 사용하고 난 뒤, 저장된값을 제거해주어야 한다.
필히 remove를 호출하자.
'Back-End > Java' 카테고리의 다른 글
MySQL-jOOQ BigDecimal 캐스팅 다루기 (0) | 2022.03.26 |
---|---|
인텔리J Entity Class에 @Table(name), @Column(name) 빨간줄 끄는방법 (0) | 2020.06.12 |
[TDD] Mockito (0) | 2020.05.08 |
JAVA 자소 분리된 단어 합치기 (2) | 2020.04.30 |
직접 작성해보는 java map, filter, reduce, curry (0) | 2019.10.28 |