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());
    }
}

Tags:
0 comments