实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
public class ThreadLocalContext {
// 使用ThreadLocal存储上下文信息
private static final ThreadLocal<Map<String, Object>> context = new ThreadLocal<>();
// 初始化上下文
public static void init() {
context.set(new HashMap<>());
}
// 获取当前线程的上下文
public static Map<String, Object> getContext() {
return context.get();
}
// 清除当前线程的上下文
public static void clear() {
context.remove();
}
// 向上下文中添加键值对
public static void put(String key, Object value) {
Map<String, Object> map = context.get();
if (map != null) {
map.put(key, value);
}
}
// 从上下文中获取值
public static Object get(String key) {
Map<String, Object> map = context.get();
return map != null ? map.get(key) : null;
}
// 示例方法,展示如何使用ThreadLocal存储和获取上下文信息
public static void main(String[] args) {
// 初始化上下文
init();
try {
// 设置值
put("userId", 123);
put("userName", "Alice");
// 执行一些操作...
// 获取值
Object userId = get("userId");
Object userName = get("userName");
System.out.println("userId: " + userId + ", userName: " + userName);
} finally {
// 清除上下文
clear();
}
}
}
这个简单的例子展示了如何使用ThreadLocal来管理和存储线程特有的上下文信息。在多线程环境中,每个线程都有自己的上下文,不会与其他线程的上下文混淆。这种方式在处理用户身份验证、请求跟踪等场景中非常有用。
评论已关闭