ThreadLocal

发布时间 2023-12-15 22:27:11作者: Anne起飞记
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作用的机理与线程是绑定的,因此不能直接用于保存异步任务的数据,需要通过一些别的方式进行操作。