在碼頭源代碼,jetty-xml
模塊,XmlConfiguration
有以下代碼:爲什麼靜態最終變量使用靜態方法初始化需要同步?
java private static final XmlParser __parser = initParser();
private synchronized static XmlParser initParser() {
XmlParser parser = new XmlParser();
URL config60 = Loader.getResource(XmlConfiguration.class, "org/eclipse/jetty/xml/configure_6_0.dtd");
URL config76 = Loader.getResource(XmlConfiguration.class, "org/eclipse/jetty/xml/configure_7_6.dtd");
URL config90 = Loader.getResource(XmlConfiguration.class, "org/eclipse/jetty/xml/configure_9_0.dtd");
parser.redirectEntity("configure.dtd", config90);
parser.redirectEntity("configure_1_0.dtd", config60);
parser.redirectEntity("configure_1_1.dtd", config60);
...
return parser;
的__parser
可變使用initParser()
initialization.the __parser
應該是線程安全的靜態方法,僅由類加載器,爲什麼一度加載initParser()
需要使用?是否過量?
進一步解釋:我調試了jetty-start
模塊的Jetty源代碼,然後調用jetty-xml
模塊。
「XmlConfiguration.class」還有什麼其他的同步嗎? – 2014-10-22 06:50:27
原子性很可能? – xTrollxDudex 2014-10-22 06:52:23
也許看看介紹'synchronize'的提交可能會提供一個洞察。 – 2014-10-22 06:55:41