5

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

我了解“init”方法是由一个线程调用的,而变量会被另一个线程访问,所以似乎是必要的。或者可能不是?当“init”方法完成时,是否有任何机制保证实例变量的当前值对所有其他线程可见?

4

1 回答 1

6

servlet 容器将确保 servlet 的初始化和它们的调用之间存在内存屏障。你不应该做任何事情。

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

于 2012-07-30T10:56:49.977 回答