是一个Struts 2拦截器,它可以放置和弹出Value Stack线程安全吗?

时间:2015-09-08 09:45:50

标签: java multithreading struts2 thread-safety struts2-interceptors

考虑一个拦截器,它将一个对象放在Value Stack中,做一些逻辑然后删除它:

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

doSomeLogic();

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

正如Are Interceptors in Struts2 Thread UNsafe?中提到的,拦截器是线程安全的,但是当我们在上面的代码中处理Value Stack时,我想知道这是否正常,或者我们应该在代码段上面进行同步。

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

1 个答案:

答案 0 :(得分:1)

  

Are Interceptors in Struts2 Thread UNsafe?中所述,拦截器是线程安全的

拦截器 NOT 线程安全;但是,在JAVA中,方法

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

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

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

BTW ......为什么不为此使用Session? :)