18 Oct 2020
[Java] ThreadLocal
ThreadLocal
java.lang 패키지에서 제공하는 쓰레드 범위 변수 즉,쓰레드 수준의 데이터 저장소.
-
같은 쓰레드 내에서만 공유
-
따라서 같은 쓰레드라면 해당 데이터를 메소드 매개변수로 넘겨줄 필요없음.
-
SecurityContextHolder의 기본전략이다.
사용예시
public class AccountContext{
private static final ThreadLocal<Account> ACCOUNT_THREAD_LOCAL=new threadLocal<>();
public static void setAccount(Account account){
ACCOUNT_THREAD_LOCAL.set(account);
}
public static Account getAccount(){
return ACCOUNT_THREAD_LOCAL.get();
}
}
Controller
@GetMapping("/example")
public String example(Principal principal){
AccountContext.setAccount(principal.findByUsername(principal.getName()));
sampleService.dashboard();
return "example";
}
Service
@Service
public class SampleService{
public void dashboard(){
Account account=AccountContext.getAccount();
System.out.println(account.getUsername());
}
}