由于存在双重检查锁定问题,因此我们必须使用同步来保证对以下方法(org.apache.struts.util.MessageResources 类)的并发访问:
惰性实例化
public synchronized static MessageResources getMessageResources(String config) {
if (defaultFactory == null) {
defaultFactory = MessageResourcesFactory.createFactory();
}
return defaultFactory.createResources(config);
}
为什么不使用:
渴望实例化
static {
// Construct a new instance of the specified factory class
try {
if (clazz == null)
clazz = RequestUtils.applicationClass(factoryClass);
MessageResourcesFactory defaultFactory =
(MessageResourcesFactory) clazz.newInstance();
} catch (Exception e) {
LOG.error("MessageResourcesFactory.createFactory", e);
}
}
进而:
public static MessageResources getMessageResources(String config) {
return defaultFactory.createResources(config);
}
它将允许对方法 getMessageResources 的并发访问,至少在我的情况下,它可能会被调用很多次。
不使用同步的含义在这里: