ThreadLocal如何实现多线程间存取独立?

ThreadLocal是什么

ThreadLocal 是 java.lang包下的一个类,用于在多线程环境中保存线程私有变量。

会用再说

当一个线程执行过程中需要共享某个值,且这个值属于线程私有,可以使用ThreadLocal。

例如:Web开发中的请求处理过程。每个请求通常由一个线程来处理,而不同请求之间的数据是相互独立的。使用 ThreadLocal 可以很方便地在请求处理过程中共享数据,比如用户信息,看个例子:

public class UserContext {
   
    // 使用 ThreadLocal 存储用户信息
    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 clearUser() {
   
        userThreadLocal.remove();
    }
}

设计一个UserContext 类,用于存储用户信息,内部使用 ThreadLocal 实现。接下来模拟一下请求处理过程。

//模拟请求处理过程
public class WebRequestProcessor {
   

    //请求处理过程
    public void processRequest(int userId) {
   
        
        // 从数据库中获取用户信息
        User user = UserRepository.getUserById(userId);

        // 将用户信息保存到UserContext中
        UserContext.setUser(user);

        // 整个请求处理过程中可以随时获取用户信息
        performAuthentication();
        performAuthorization();

        //...

        // 处理完请求后清除用户信息
        UserContext.clearUser();
    }

    private void performAuthentication() {
   
        // 获取用户身份,并验证...
        User user = UserContext.getUser();
        System.out.println("Authenticating user: " + user.getUsername());
        
    }

    private void performAuthorization() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值