스레드 로컬
해당 스레드만 접근할 수 있는 특별한 저장소
같은 인스턴스의 스레드 로컬 필드에 접근해도 동시성 문제가 없다.
@Slf4j
public class ThreadLocalService {
private ThreadLocal<String> nameStore = new ThreadLocal<>();
public String logic(String name) {
log.info("저장 name = {} -> nameStore = {}", name, nameStore.get());
nameStore.set(name);
sleep(1000);
log.info("조회 nameStore = {}", nameStore.get());
return nameStore.get();
}
private void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
set(), get()으로 값을 저장하고 조회할 수 있다.
모두 사용하고 나면 반드시 remove()로 값을 제거해준다.
주의사항
만약 스레드 로컬 값을 사용 후 제거하지 않고 그냥 두면 WAS처럼 스레드 풀을 사용하는 경우 문제가 발생할 수 있다.
데이터가 살아있는 채로 스레드가 재사용 될 수 있다.
Last updated
Was this helpful?