是否有必要将所有servlet实例变量标记为“volatile”(或从同步部分中访问它们)?包括那些在“init”方法中定义的,之后没有修改过的?
据我所知,“init”方法由一个线程调用,该变量将被另一个线程访问,因此似乎是必要的。或者可能不是?是否有任何机制可以保证当“init”方法完成时,所有其他线程都可以看到实例变量的当前值?
答案 0 :(得分:5)
servlet容器将确保servlet初始化与其调用之间存在内存障碍。你不应该做任何事情。
注意:我没有在规范中找到这样的要求,但我认为容器不能做到这一点。顺便说一句,在GenericServlet中,init方法初始化的实例变量ServletConfig config
未标记为volatile。