ThreadLocal과 ThreadLocalMap

2024. 11. 17. 21:29개발/Java

ThreadLocal은 어떻게 Thread마다 자신의 값을 관리할까?

각 Thread 안에는 static한 ThreadLocalMap이라는 구조체를 가지고 있고 ThreadLocal에서 get()을 호출할 경우 ThreadLocalMap에서 ThreadLocal의 객체를 키로 하여 자신의 스레드의 ThreadLocal을 찾는다.

ThreadLocal의 get()은 다음과 같다.

public T get() {
	  return get(Thread.currentThread());
}

private T get(Thread t) {
    ThreadLocalMap map = getMap(t);
    if (map != null) {
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null) {
            @SuppressWarnings("unchecked")
            T result = (T) e.value;
            return result;
        }
    }
    return setInitialValue(t);
}

ThreadLocalMap getMap(Thread t) {
    return t.threadLocals;
}

 

Thread 클래스에는 ThreadLocalMap을 필드로 가지고 있다.

ThreadLocal.ThreadLocalMap threadLocals;

 

ThreadLocalMap 클래스는 static으로 되어 있으며 외부 패키지에서는 이 클래스에 접근 불가하고 Thread 객체를 통해서 접근 가능하다.

static class ThreadLocalMap {

'개발 > Java' 카테고리의 다른 글

Reflection과 객체 생성  (0) 2024.12.02
equals()와 hashcode()  (0) 2024.11.30
Mutex와 Semaphore  (0) 2024.10.20
메모리 가시성  (0) 2024.10.20
동기화  (0) 2024.10.05