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을 사용할 때는 주의해야 한다.

데이터 사용이 끝난 후 삭제하지 않으면 해당 스레드를 재사용하는 경우 올바르지 않은 값을 참조할 수 있다.