TIL

ThreadLocal 이란.

하얀잔디 2024. 1. 3. 17:00

 

우선 thread-safe 를 이해하고 가자.

가끔 라이브러리에서 가져와 사용하는 클래스들을 보면

 

...
... * it is immutable and is thread-safe. 
...

 

와 같은 글을 볼 수 있다. java.time.format.DateTimeFormatter의 주석 일부

 

즉 멀티 스레드 환경에서, 동시에 함수나 변수 등에 접근 가능 할 때 서로 다른 스레드들이 동시에 같은 것에 접근해서 이용해도 문제가 생기지 않는 다는 것을 의미한다.

 

-> 서로 다른곳에서 동시에 접근해 작업을 수행해도 결과는 문제없다는 뜻!

 

자바에서 멀티쓰레드는 보통 Thread, Runable을 이용해서 구현을 하곤 한다.

 

그렇다면 ThreadLocal이란 무엇일까. 요즘은 많은 클래스들이 thread-safe하게 만들어지는 것 같지만 thread-safe 하지 않은 클래스 또한 존재한다. 멀티 쓰레드 환경이 아니고 순차적으로 해당 클래스를 사용해서 해결되는 상황이면 굳이 고려하지 않아도 된다.

 

 

즉 오직 하나의 쓰레드 의해 읽고 쓸 수 있는 변수임.

 

Thread의 정보를 Key로 , map 형식으로 데이터를 저장해두고 사용하는 자료구조.

 

ThreadPool 사용해서 Thread 재활용시 이전에 저장된 ThreadLocal을 호출하게 되므로

 

모든 ThreadLocal 사용후 remove 필수!!

 

 

2) 그럼 언제 사용할까?

 

1) 사용자 인증정보 - Spring Security에서 사용자마다 다른 사용자 인증 정보 세션을 사용할때

2) 트랜잭션 컨텍스트 -> 트랜잭션 매니저가 트랜잭션 컨텍스트를 전파할 때,

 

 

ThreadLocal : 스레드(Thread)마다의 고유한 지역(Local) 변수를 넣어서 사용하는 클래스

 

실제로 만드는 법 참고: https://maivve.tistory.com/331

'TIL' 카테고리의 다른 글

kafka 개념 (파티셔너)  (1) 2024.01.04
자바 Reflection , 스프링 DI  (0) 2024.01.04
for vs .forEach() vs stream.forEach()  (0) 2023.12.29
STOMP 채팅 (TODO)  (0) 2023.11.28
CSR vs SSR  (0) 2023.11.22