ThreadLocal
public class UserContext { private static ThreadLocal<User> userThreadLocal = new ThreadLocal<>(); public static void setUser(User user) { userThreadLocal.set(user); } public static User getUser() { return userThreadLocal.get(); } public static void clear() { userThreadLocal.remove(); } }
1线程安全:ThreadLocal是线程安全的,因为它为每个线程提供了一个独立的变量副本,避免了多个线程共享同一个变量的可能问题。
2避免显式传递参数:使用ThreadLocal可以避免显式传递参数,使得代码更加简洁和易于维护。
3方便存储线程上下文信息:ThreadLocal可以用来存储线程上下文信息,使得在处理请求时能够方便地获取和使用这些信息。
需要注意使用后调用remove方法清除对应的引用,避免出现内存泄漏的问题。
由于ThreadLocal作用的机理与线程是绑定的,因此不能直接用于保存异步任务的数据,需要通过一些别的方式进行操作。
想都是问题,做都是答案,站着不动永远是观众。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)