将“init”中定义的servlet实例变量标记为“volatile”

时间:2012-07-30 10:46:45

标签: java servlets concurrency

是否有必要将所有servlet实例变量标记为“volatile”(或从同步部分中访问它们)?包括那些在“init”方法中定义的,之后没有修改过的?

据我所知,“init”方法由一个线程调用,该变量将被另一个线程访问,因此似乎是必要的。或者可能不是?是否有任何机制可以保证当“init”方法完成时,所有其他线程都可以看到实例变量的当前值?

1 个答案:

答案 0 :(得分:5)

servlet容器将确保servlet初始化与其调用之间存在内存障碍。你不应该做任何事情。

注意:我没有在规范中找到这样的要求,但我认为容器不能做到这一点。顺便说一句,在GenericServlet中,init方法初始化的实例变量ServletConfig config未标记为volatile。