public class UserContextHolder { private static ThreadLocal<UserContext> local = new ThreadLocal<>(); public static UserContext get() { System.out.println("------------"+local.get()); return local.get(); } public static void set(UserContext context) { local.set(context); UserContext userContext = local.get(); System.out.println("============="+userContext.hashCode()); } public static void remove() { local.remove(); } private static class UserContextThreadLocal extends ThreadLocal<UserContext> { @Override protected UserContext initialValue() { return new UserContext(); } }这个类是干嘛的
时间: 2024-04-18 12:32:54 浏览: 289
使用Java ThreadLocal.docx
这个类名为`UserContextHolder`,是一个用于在多线程环境中存储和获取用户上下文信息的工具类。
这个类使用了`ThreadLocal`来实现线程级别的用户上下文存储。`ThreadLocal`是Java中的一个线程局部变量,它可以让每个线程都拥有自己的变量副本,互不干扰。
在`UserContextHolder`类中,定义了一个私有静态的`ThreadLocal<UserContext>`类型变量`local`,用于存储用户上下文对象。
- `get()`方法用于获取当前线程的用户上下文对象。它通过调用`local.get()`来获取当前线程的用户上下文,并返回结果。如果当前线程没有设置用户上下文,则返回`null`。
- `set(UserContext context)`方法用于设置当前线程的用户上下文对象。它将传入的`context`对象保存到`local`变量中,并通过`local.get()`再次获取用户上下文对象,以确保设置成功。在此示例代码中,还打印了用户上下文对象的哈希值。
- `remove()`方法用于从当前线程中移除用户上下文对象。它调用`local.remove()`来清除当前线程的用户上下文。
此外,`UserContextHolder`类还定义了一个私有内部类`UserContextThreadLocal`,继承自`ThreadLocal<UserContext>`,并重写了`initialValue()`方法。这个内部类的作用是在每个线程首次访问`local`变量时,初始化一个新的`UserContext`对象作为初始值。
总的来说,`UserContextHolder`类提供了线程安全的方法来存储和获取用户上下文对象,并且每个线程都拥有自己独立的用户上下文。这在多线程环境中非常有用,可以避免线程间的数据混淆和竞争条件。
阅读全文