4
是否有必要將所有servlet實例變量標記爲「volatile」(或從同步節中訪問它們)?包括在「init」方法中定義的那些,並且之後未被修改?將在「init」中定義的servlet實例變量標記爲「volatile」
我知道「init」方法是由一個線程調用的,並且該變量將被另一個線程訪問,所以它似乎是必需的。或者可能不是?是否有任何機制可以確保當「init」方法完成時,實例變量的當前值將對所有其他線程可見?
是否有必要將所有servlet實例變量標記爲「volatile」(或從同步節中訪問它們)?包括在「init」方法中定義的那些,並且之後未被修改?將在「init」中定義的servlet實例變量標記爲「volatile」
我知道「init」方法是由一個線程調用的,並且該變量將被另一個線程訪問,所以它似乎是必需的。或者可能不是?是否有任何機制可以確保當「init」方法完成時,實例變量的當前值將對所有其他線程可見?
servlet容器將確保servlet初始化與其調用之間存在內存屏障。你不應該做任何事情。
注:我沒有在規範中找到這樣的要求,但我會認爲它是容器的失敗不這樣做。順便說一下,在GenericServlet中,init方法初始化的實例變量ServletConfig config
未標記爲volatile。
檢查'GenericServlet'做什麼是一個好主意。 – 2013-10-03 13:06:11