Java Struts 2拦截器是线程安全的吗?
考虑一个拦截器,它将一个对象放入值堆栈,执行一些逻辑,然后将其删除:Java Struts 2拦截器是线程安全的吗?,java,multithreading,struts2,thread-safety,struts2-interceptors,Java,Multithreading,Struts2,Thread Safety,Struts2 Interceptors,考虑一个拦截器,它将一个对象放入值堆栈,执行一些逻辑,然后将其删除: ActionContext.getContext().getValueStack().set("user", CurrentUser); doSomeLogic(); ActionContext.getContext().getValueStack().pop(); 正如前面提到的,拦截器是线程安全的,但是当我们在上面的代码中处理值堆栈时,我想知道这是否可以,或者我们应该同步上面的代码部分 作为第二个问题,是否有更好的方
ActionContext.getContext().getValueStack().set("user", CurrentUser);
doSomeLogic();
ActionContext.getContext().getValueStack().pop();
正如前面提到的,拦截器是线程安全的,但是当我们在上面的代码中处理值堆栈时,我想知道这是否可以,或者我们应该同步上面的代码部分
作为第二个问题,是否有更好的方法从值堆栈中删除元素
正如前面提到的,拦截器是线程安全的
拦截器不是线程安全的;但是,在JAVA中,方法是
如果不使用静态变量或实例变量,则方法中实例化的所有内容都是线程安全的,这意味着访问该方法的多个线程将顺序访问该方法,或者将在包含类的新实例中访问该方法
变量永远不会混合,并且您不需要同步任何内容
此外,ValueStack
存储在ActionContext
中,即ThreadLocal
,因此绝对是线程安全的
顺便说一句。。。为什么不为此使用会话?:) 谢谢,还有一个关于为什么我们不能使用会话的很长的故事;)。你能告诉我从值堆栈中弹出是否可以。有没有办法删除添加的密钥?!TL;博士P顺便说一句,是的,可以从堆栈中弹出值,而且,好吧,不,没有其他方法(但我通常不会直接处理堆栈,RomanC是你的人:D)从值堆栈中删除它的实际意义是什么?每个请求都会创建值堆栈。在回顾struts框架时,我发现struts总是将值放在它自己的值堆栈中,应用程序从中读取。我认为不建议应用程序在其中添加任何其他内容。这就是我删除推送值的原因。