Иногда, когда мне нужно лениво инициализированное поле, я использую следующий шаблон проектирования.
class DictionaryHolder {
private volatile Dictionary dict; // some heavy object
public Dictionary getDictionary() {
Dictionary d = this.dict;
if (d == null) {
d = loadDictionary(); // costy operation
this.dict = d;
}
return d;
}
}
Похоже на Double Checking idion, но не совсем. Синхронизация отсутствует, и метод loadDictionary
может быть вызван несколько раз.
Я использую этот шаблон, когда параллелизм довольно низкий. Также я принимаю во внимание следующие предположения при использовании этого шаблона: метод
loadDictionary
всегда возвращает одни и те же данные. Метод loadDictionary
является потокобезопасным. Мои вопросы:
getDictionary ()
возвращать недопустимые данные? dict
энергонезависимым для большей эффективности?