Ленивое выделение означает просто не выделять ресурс, пока он действительно не понадобится. Это обычное явление для одноэлементных объектов, но, строго говоря, каждый раз, когда ресурс выделяется как можно позже, у вас есть пример ленивого распределения.
Откладывая выделение ресурса до тех пор, пока он вам действительно не понадобится, вы можете уменьшить время запуска и даже полностью исключить выделение, если вы никогда не используете объект. Напротив, вы могли бы заранее выделить ресурс, который, как вы ожидаете, понадобится позже, что может сделать последующее выполнение более эффективным за счет времени запуска, а также избежать вероятности сбоя выделения при выполнении программы позже.
В следующем коде приведен пример синглтона, выделенного лениво:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
Обратите внимание, что этот код не является потокобезопасным. В большинстве случаев доступ к методу get()
должен быть каким-то образом синхронизирован.
Схожая (и, возможно, более общая) концепция - ленивая инициализация .