1. 개요
ThreadLocal에 대해 알아본다.
2. 역사
자바 1.2 버전부터 제공되고 있다.
3. 목적
스레드 단위로 로컬 변수를 할당하는 기능이다.
일반적인 변수는 메소드, for 블록 등 특정 코드 블록 내에서 사용 가능하다.
그런데 ThreadLocal을 사용하면 스레드 영역에 변수 저장이 가능하다. 그래서 특정 스레드가 사용하는 모든 코드에서 스레드에 설정된 변수 값을 사용할 수 있게 된다.
예를 들면 세션에 저장된 정보를 다음 작업까지 전달하기 위해서 사용할 수 있다. Request에 대해 Controller 동작 전 Interceptor나 Filter를 통해 Session에 담긴 공통 정보를 ThreadLocal에 저장한다.
4. 사용법
ThreadLocal 클래스를 통해 제공된다.
- ThreadLocal 객체를 생성한다.
- ThreadLocal.set() 메소드로 값을 저장한다.
- ThreadLocal.get() 메소드로 값을 읽어온다.
- ThreadLocal.remove() 메소드로 값을 삭제한다.
5. 주의사항
Thread Pool을 사용할 때는 주의해야 한다.
데이터 사용이 끝난 후 삭제하지 않으면 해당 스레드를 재사용하는 경우 올바르지 않은 값을 참조할 수 있다.