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 |