ThreadLocal을 이용해서 각 쓰레드마다 저장소의 개념으로 값을 저장할 수 있다.
ThreadLocal<T> threadLocal = new ThreadLocal();
threadLocal.set(Value);
threadLocal.get();
threadLocal.remove();
ThreadLocal을 사용하고 나서 꼭 ThreadLocal의 값을 비워줘야한다.
-> 이유
예를 들어 Was 에서 ThreadLocal을 사용한다고 하자.
Thread를 새로 생성하는 것은 많은 비용이 들기 때문에 Thread Pool을 이용해서 Thread를 가져와서 사용한다.
사용자 A가 ThreadLocal을 이용해서 어떠한 작업을 진행하고 값을 비워주지 않았다. 이때 Thread-A를 사용한다고 했을때 작업이 끝난 Thread-A는 다시 Thread Pool로 들어간다.
다음으로 사용자 B가 우연치않게 Thread Pool에 있는 Thread-A를 사용하게 된다면 Thread-A의 ThreadLocal의 값이 남아있기 때문에 이를 사용할 수 있게 된다.
따라서 정합성이 떨어진다.