[JAVA] ThreadLocal

신명철·2022년 3월 24일
0

JAVA

목록 보기
7/14

Stack & Heap

JVM의 Thread들은 Heap에 있는 객체들을 공유한다. Stakc에는 지역변수들이 저장되고, 이 변수들은 메서드가 호출될 때 생성되고 나갈 때 소멸되는 특징이 있다.

그렇기 때문에 Stack에 있는 변수들은 Thread-Safe 하다는 장점이 있다. 하지만 다른 메서드와 변수를 공유하기 위해서는 메서드의 파라미터로 받아야만 하고, 자신의 변수를 공유하기 위해서는 변수를 반환해줘야만 한다는 단점이 있다.

ThreadLocal은 이런 단점을 보완하기 위해 사용한다.

ThreadLocal

ThreadLocal은 파라미터 형태의 변수 공유가 아닌 다른 형태를 제공한다. 하나의 Thread 안에서 변수를 공유할 수 있게 해준다.

사용법

  1. ThreadLocal 객체를 생성한다.
  2. ThreadLocal.set() 메서드를 이용해서 현재 쓰레드의 로컬 변수에 값을 저장한다.
  3. ThreadLocal.get() 메서드를 이용해서 현재 쓰레드의 로컬 변수 값을 읽어온다.
  4. ThreadLocal.remove() 메서드를 이용해서 현재 쓰레드의 로컬 변수 값을 삭제한다

주의 사항

ThreadLocalThread의 정보를 key로 Map의 형태로 저장하는 자료구조가 있다. 그래서 만약 ThreadPool의 환경에서 Thread를 재활용 한다면 ThreaLocal에는 원치 않는 값이 들어있을 수 있다. 그렇기 때문에 사용 후 항상 remove()를 호출해 값을 제거해줘야 한다.

profile
내 머릿속 지우개

0개의 댓글