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作用的机理与线程是绑定的,因此不能直接用于保存异步任务的数据,需要通过一些别的方式进行操作。