что такое ленивое распределение? - PullRequest
18 голосов
/ 03 апреля 2009

Что означает ленивое распределение объектов и чем оно полезно?

1 Ответ

17 голосов
/ 03 апреля 2009

Ленивое выделение означает просто не выделять ресурс, пока он действительно не понадобится. Это обычное явление для одноэлементных объектов, но, строго говоря, каждый раз, когда ресурс выделяется как можно позже, у вас есть пример ленивого распределения.

Откладывая выделение ресурса до тех пор, пока он вам действительно не понадобится, вы можете уменьшить время запуска и даже полностью исключить выделение, если вы никогда не используете объект. Напротив, вы могли бы заранее выделить ресурс, который, как вы ожидаете, понадобится позже, что может сделать последующее выполнение более эффективным за счет времени запуска, а также избежать вероятности сбоя выделения при выполнении программы позже.

В следующем коде приведен пример синглтона, выделенного лениво:

public class Widget {
    private Widget singleton;

    public static Widget get() {
        if (singleton == null) {
            singleton = new Widget();
        }
        return singleton;
    }

    private Widget() {
        // ...
    }

    // ...
}

Обратите внимание, что этот код не является потокобезопасным. В большинстве случаев доступ к методу get() должен быть каким-то образом синхронизирован.

Схожая (и, возможно, более общая) концепция - ленивая инициализация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...