我在使用threadLocal的时候, 排查代码确认了, 是在一个线程下设置值的 但是后面获取就为null,这是什么原因造成的下面是代码
private static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<Map<String, Object>>();
public static void set(String key, Object value) {
log.info("set value --> {}", Thread.currentThread().getName());
Map<String, Object> map = threadLocal.get();
if (CollectionUtils.isEmpty(map)) {
map = Maps.newHashMap();
}
map.put(key, value);
threadLocal.set(map);
log.info("value----> {}", threadLocal.get().get(key));
}
public static Object get(String key){
log.info("get value --> {}", Thread.currentThread().getName());
Map<String, Object> map = threadLocal.get();
if (CollectionUtils.isEmpty(map)) {
map = Maps.newHashMap();
threadLocal.set(map);
}
return map.get(key);
}
threadLocal类,线程间数据是隔离的。如果你在线程一中存储的数据,线程二就拿不到数据。
system.out.println(threadA.getName();+" 执行中")
看下key是不是一樣的吧!还有Map打印下