안녕하세요 여러분. 오늘 포스팅 할 내용은 자바 1.2 버전 부터 제공되고 있는
ThreadLocal 클래스 입니다
ThreadLocal - Thread 단위로 로컬 변수를 할당하는 기능
일반 변수의 수명은 특정 코드 블록[ex)method 범위, for블록 내의 범위] 내에서만 유효합니다.
{
int a = 10;
...
// 블록 내에서 a 변수 사용 가능
}
// 변수 a는 위 코드 블록이 끝나면 더 이상 유효하지 않다. (즉, 수명을 다한다.)
반면에 ThreadLocal을 이용하면 thread 영역에 변수를 설정할 수 있기 때문에, 특정 쓰레드가 실행하는 모든 코드에서 그 쓰레드에 설정된 변수 값을 사용할 수 있게 됩니다.
위 코드에서 주목할 부분은 동일한 코드를 실행할 경우 각 thread 에 변수 값이 저장된다는 점입니다.
(example)
// 현재 쓰레드와 관련된 로컬 변수를 하나 생성한다.
ThreadLocal<UserInfo> local = new ThreadLocal<UserInfo>();
// 로컬 변수에 값 할당
local.set(currentUser);
// 이후 실행되는 코드는 쓰레드 로컬 변수 값을 사용
UserInfo userInfo = local.get();
public class Context {
public static ThreadLocal<Date> local = new ThreadLocal<Date>();
}
Context 클래스를 사용하여 thread 로컬 변수를 설정하고 사용하는 코드 예시입니다.
class A {
public void a() {
Context.local.set(new Date());
B b = new B();
b.b();
Context.local.remove();
}
}
class B {
public void b() {
Date date = Context.local.get();
C c = new C();
c.c();
}
}
class C {
public void c() {
Date date = Context.local.get();
}
}