[JAVA] ThreadLocal에 대하여

정호석·2022년 6월 6일
0

안녕하세요 여러분. 오늘 포스팅 할 내용은 자바 1.2 버전 부터 제공되고 있는
ThreadLocal 클래스 입니다

ThreadLocal - Thread 단위로 로컬 변수를 할당하는 기능

ThreadLocal 이란?

일반 변수의 수명은 특정 코드 블록[ex)method 범위, for블록 내의 범위] 내에서만 유효합니다.

{
    int a = 10;
    ...
   // 블록 내에서 a 변수 사용 가능
}
// 변수 a는 위 코드 블록이 끝나면 더 이상 유효하지 않다. (즉, 수명을 다한다.)

반면에 ThreadLocal을 이용하면 thread 영역에 변수를 설정할 수 있기 때문에, 특정 쓰레드가 실행하는 모든 코드에서 그 쓰레드에 설정된 변수 값을 사용할 수 있게 됩니다.

위 코드에서 주목할 부분은 동일한 코드를 실행할 경우 각 thread 에 변수 값이 저장된다는 점입니다.

ThreadLocal의 기본 사용법

  1. ThreadLocal 객체를 생성합니다.
  2. ThreadLocal.set() 메서드를 이용하여 현재 thread의 로컬 변수에 값을 저장합니다.
  3. ThreadLocal.get() 메서드를 이용하여 현재 thread의 로컬 변수값을 읽어옵니다.
  4. ThreadLocal.remove() 메서드를 이용하여 현재 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();
    }
}

profile
welcome

0개의 댓글