정의
쓰레드별 데이터를 보관하는 전용보관소, 쓰레드별 데이터 경합을 방지해준다.
사용법
// 값 선언
ThreadLocal<Integer> threadLocalValue = new ThreadLocal<>();
// 값 저장
threadLocalValue.set(1);
// 값 조회
threadLocalValue.get();
// 값 제거
threadLocalValue.remove();
예시
// 쓰레드 로컬을 사용하는 서비스 만들기
public class ThreadLocalService {
private ThreadLocal<String> context = new ThreadLocal<>();
public String begin(String value) {
context.set(value)
return context.get();
}
public void end(){
context.remove();
}
}
// 쓰레드 로컬 실행하기
private ThreadLocalService service = new ThreadLocalService();
String service1 = service.begin("hello1");
service.end();
주의사항
쓰레드 로컬을 사용하고 나면, remove()를 이용해 값일 지워야 메모리 누수가 발생하지 않는다.
특히 쓰레드풀을 사용할 때 문제가 된다. WAS에서 사용된 쓰레드를 쓰레드풀에 반환하고, 다른 쓰레드가 재사용한다.
이때, 쓰레드 로컬에 데이터가 남아있다면 영향을 받을 수 있다.
'JAVA > Spring' 카테고리의 다른 글
@RequestMapping 과 @Controller (0) | 2022.01.26 |
---|---|
Spring MVC 구조 (0) | 2022.01.23 |
스프링 빈과 의존성 주입 (DI) (0) | 2022.01.12 |