一、ThreadLocal核心原理
ThreadLocal通过为每个线程创建变量副本来解决多线程共享冲突。其内部采用ThreadLocalMap存储数据,key为弱引用的ThreadLocal实例,value为线程变量值。这种设计既保证了线程安全,又避免了同步性能损耗
二、实战示例:用户上下文管理
public class UserContextHolder {
private static final ThreadLocal<User> context = new ThreadLocal<>();
public static void setUser(User user) {
context.set(user);
}
public static User getUser() {
return context.get();
}
public static void clear() {
context.remove(); // 必须显式清除防止内存泄漏
}
}
// 在拦截器中设置用户信息
public void preHandle(HttpServletRequest request) {
User user = getUserFromToken(request);
UserContextHolder.setUser(user);
}
// 在业务层获取用户
public void businessMethod() {
User currentUser = UserContextHolder.getUser();
// 使用用户信息...
}
三、内存泄漏警示与最佳实践
ThreadLocal使用不当会导致严重内存泄漏。由于ThreadLocalMap的key是弱引用,但value是强引用,必须显式调用remove()方法清理条目。建议在finally块中执行清理操作,或使用try-with-resources模式管理生命周期

被折叠的 条评论
为什么被折叠?



