Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts 2拦截器是线程安全的吗?_Java_Multithreading_Struts2_Thread Safety_Struts2 Interceptors - Fatal编程技术网

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总是将值放在它自己的值堆栈中,应用程序从中读取。我认为不建议应用程序在其中添加任何其他内容。这就是我删除推送值的原因。