Struts 2 拦截器是否是线程安全的?

Is a Struts 2 Interceptor which puts and pops to Value Stack thread-safe?

考虑一个将对象放入值堆栈的拦截器,执行一些逻辑然后将其删除:

ActionContext.getContext().getValueStack().set("user", CurrentUser);

doSomeLogic();

ActionContext.getContext().getValueStack().pop();

正如Are Interceptors in Struts2 Thread UNsafe?中提到的,拦截器是线程安全的,但是当我们在上面的代码中处理值堆栈时,我想知道这样是否可以,或者我们应该同步上面的代码部分。

作为次要问题,是否有更好的方法从值堆栈中删除元素?

As mentioned in Are Interceptors in Struts2 Thread UNsafe? the interceptors are thread safe

拦截器不是线程安全的;然而,在 JAVA 中, 方法是

如果您不使用static变量或实例变量,方法中实例化的所有内容都是线程安全的,这意味着访问该方法的多个线程将访问它顺序地访问它,或者将在包含 class 的新实例中访问它。

变量永远不会混合,你不需要同步任何东西

此外,ValueStack存储在ActionContext中,即ThreadLocal,因此绝对是线程安全的。


顺便说一句...为什么不为此使用会话? :)