2

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

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

doSomeLogic();

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

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

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

4

1 回答 1

1

正如Struts2 线程中的拦截器是否不安全?拦截器是线程安全的

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

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

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

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


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

于 2015-09-08T09:59:56.280 回答