【发布时间】:2025-12-21 05:50:06
【问题描述】:
是否有必要将所有 servlet 实例变量标记为“易失性”(或从同步部分中访问它们)?包括那些在“init”方法中定义的,之后没有修改的?
我理解“init”方法是一个线程调用的,变量会被另一个线程访问,所以看来是有必要的。或者可能不是?是否有任何机制保证在“init”方法完成时实例变量的当前值对所有其他线程可见?
【问题讨论】:
标签: java servlets concurrency
是否有必要将所有 servlet 实例变量标记为“易失性”(或从同步部分中访问它们)?包括那些在“init”方法中定义的,之后没有修改的?
我理解“init”方法是一个线程调用的,变量会被另一个线程访问,所以看来是有必要的。或者可能不是?是否有任何机制保证在“init”方法完成时实例变量的当前值对所有其他线程可见?
【问题讨论】:
标签: java servlets concurrency
servlet 容器将确保 servlet 的初始化和它们的调用之间存在内存屏障。你不应该做任何事情。
注意:我在规范中没有找到这样的要求,但我认为容器不这样做是失败的。 BTW,在GenericServlet中,init方法初始化的实例变量ServletConfig config没有被标记为volatile。
【讨论】:
GenericServlet 的功能是个好主意。