ThreadLocal은 각 스레드가 독립적으로 데이터를 저장하고 관리할 수 있도록 해주는 Java 클래스입니다.
즉, 각 스레드마다 개별적인 변수 공간을 제공하여 공유 자원 없이도 안전하게 데이터를 유지할 수 있습니다.
get() 호출 시 → 현재 스레드의 데이터 반환set() 호출 시 → 현재 스레드의 데이터 설정synchronized 없이도 안전한 멀티스레드 프로그래밍 가능| 항목 | ThreadLocal | synchronized |
|---|---|---|
| 🔐 동기화 필요 여부 | ❌ 불필요 (스레드별 독립 데이터) | ✅ 필요 (공유 자원 보호) |
| ⚡ 성능 | ✅ 빠름 (락 없음) | ❌ 느림 (락 획득 대기 필요) |
| 🔗 데이터 공유 | ❌ 불가능 | ✅ 가능 |
| 🧰 사용 예시 | 사용자 인증, 트랜잭션 관리 등 | 공유 데이터 수정 필요할 때 |
ThreadLocal은 Thread 내부의 ThreadLocalMap에 데이터 저장
스레드 풀 사용 시
remove() 호출하여 ThreadLocal 값 제거ConcurrentHashMapConcurrentHashMap이 더 적절ConcurrentHashMap<Long, Object> map = new ConcurrentHashMap<>();
map.put(Thread.currentThread().getId(), myData);