【发布时间】:2012-03-26 19:54:38
【问题描述】:
我了解 Struts2 Action 类是线程安全的,因为这些操作被放入了值堆栈中。值堆栈又是动作上下文的一部分。由于动作上下文是线程本地的,所以存储在动作上下文中的值(包括值堆栈)对于每个线程都是唯一的。所以,Action 是线程安全的。
但是考虑一下拦截器:它们真的很有用,它们为程序员完成了所有那些乏味的小工作......比如验证、获取参数值等。但要考虑的是:拦截器可以在多个之间共享要求。那么这会使拦截器线程不安全吗?
带着这个问题,我尝试在网上浏览一些与这个问题相关的好文章。我发现了一篇非常好的文章,他们在其中明确提到了拦截器如何不是线程安全的示例。
网页是:http://www.bullraider.com/java/struts2/tutorials/interceptors-and-thread-safety
我从这篇文章中了解到,拦截器线程不安全的主要原因是拦截器只创建一次。即每个拦截器只有一个对象。因此,当一个 Interceptor 的 同一个实例在线程之间共享时,实例字段是不安全的。
在文章的最后提到,在某些情况下,即使是拦截器也是线程安全的。但他们没有提到任何此类案例。我上网寻找答案......但徒劳无功:(
谁能告诉我或提供一个链接,我可以在其中找到如何使拦截器线程安全(或者拦截器线程安全的场景是什么)?
【问题讨论】:
标签: java struts2 thread-safety interceptor