为什么 ThreadLocal 实用程序在 Spring MVC 应用程序中总是返回 null?
我编写了这个实用程序类来在 Spring MVC 应用程序中保存临时数据:
public abstract class FooUtil {
private static final ThreadLocal<String> threadFoo = new ThreadLocal<String>();
public static String getFooId(){
return threadFoo.get();
}
public static void setFooId(String fooId){
threadFoo.set(fooId);
}
public static void removeFooId(){
threadFoo.remove();
}
}
因此我调用 FooUtil.setFooId("foo")
。
但是当我稍后调用 FooUtil.getFooId()
时,它总是返回 null
。
我需要构造函数吗?或者也许这不应该是一个抽象类?我不知道。
I wrote this utility class to save temporary data in a Spring MVC app:
public abstract class FooUtil {
private static final ThreadLocal<String> threadFoo = new ThreadLocal<String>();
public static String getFooId(){
return threadFoo.get();
}
public static void setFooId(String fooId){
threadFoo.set(fooId);
}
public static void removeFooId(){
threadFoo.remove();
}
}
So I call FooUtil.setFooId("foo")
.
But when I later call FooUtil.getFooId()
, it always returns null
.
Do I need a constructor? Or maybe this shouldn't be an abstract class? I don't know.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要从与 setFooId 相同的线程调用 getFooId。这样你会得到相同的结果。
当您设置并获取值时,我会记录线程名称以查看它们是否相同。
You need to call getFooId from the same thread as setFooId. This way you get the same result.
I would log the thread name when you set and get values to see if they are the same.