공부 흔적남기기

JAVA 자바 ThreadLocal 쓰레드 로컬이란 본문

프로그래밍 언어/Java

JAVA 자바 ThreadLocal 쓰레드 로컬이란

65살까지 코딩 2023. 5. 16. 22:12
728x90
반응형

ThreadLocal이란

각 쓰레드마다 저장소를 만들어 동시성 문제를 해결한다. 

spring을 사용하다 보면 주로 Bean들을 주로 싱글톤으로 생성하기 떄문에 동시성 문제에 빠질 수 있다. 

2개 이상의 쓰레드에서 동시에 싱글톤 객체를 접근하여 싱글톤 객체의 필드를 수정하게 되면 동시성 문제에 빠지게 된다.
이 때 이 문제를 해결하는 방법중 하나로 쓰레드 로컬을 사용한다.

쓰레드 로컬은 쓰레드마다 각 저장소를 만들어 해당 쓰레드에서만 사용할 수 있는 로컬 저장소를 생성한다.
따라서 쓰레드에서 싱글톤을 동시에 접근해 수정해도 각자 쓰레드의  저장소를 사용하므로 문제가 되지 않는다.

 

ThreadLocal 주의점

쓰레드로컬을 사용할 때 주의해야 할 것은 주로 WAS는 ThreadPool을 사용한다. 즉 Thread를 재사용하는데, Thread가 끝난 시점에 threadLocal에 있는 정보를 remove 해주지 않으면 해당 쓰레드가 재사용 될때 이전 엔드유저가 사용한 데이터가 남아 있어 데이터가 노출 될 수 있다. 따라서 ThreadLocal을 사용할때 Thread가 끝나면 인터셉터나 필터 혹은 직접 ThreadLocal을 비워주어야한다. 

728x90
반응형