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()