java - 将 "init"中定义的 servlet 实例变量标记为 "volatile"

标签 java servlets concurrency

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

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

最佳答案

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

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

关于java - 将 "init"中定义的 servlet 实例变量标记为 "volatile",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719916/

相关文章:

java - 向工具提示文本添加带有斜体字体样式的彩色字符串

java - 依赖性检查 3.1.1 IO 异常 : HEAD request returned a non-200 status code

java - 我如何利用已经存在的外部 servlet?

java - Servlet eclipse 无法识别制表符

java - 具有多个订阅者和事件的 RxJava 并发

java - 在矩形内创建字符串

java - 在java中使用selenium抓取表

java - Openbravo servlet session

c++ - tbb::concurrent_unordered_map::unsafe_erase 是否会使任何现有的迭代器失效?

java - Lock.tryLock超时异常的JUnit测试场景