- 가능하다면 로컬 변수를 사용합니다.
- 프레임워크에 위임합니다.
- e.g.
RequestContextHolder
ConcurrentHashMap
같은 요소를 ThreadLocal
변수로 변경할 수 있는지 검토합니다.
public class UserContextHolder {
public static ThreadLocal<User> holder = new ThreadLocal();
}
class HoldingService {
public void holdUser() {
// Set user for this thread
User user = getUser();
UserContextHolder.holder.set(user);
}
}
class SomeService {
public void getUser() {
// Get user for this thread
User user = UserContextHolder.holder.get();
// Remove user; user no longer required
UserContextHolder.holder.remove();
}
}