Подходит для вызова CompletableFuture # присоединяться много раз? - PullRequest
0 голосов
/ 08 ноября 2019

Внутри класса, который обслуживает ресурсы, которые должны быть сначала загружены в память, вот мой шаблон:

public class FooService {
    private final CompletableFuture<Void> loaded;
    public FooService() {
        this.loaded = CompletableFuture.runAsync(() -> {
            // Do some task that shouldn't hold up constructing
        });
    }

    public Foo get(String bar) {
        this.loaded.join(); // Ensure we have loaded everything before continuing
        return something;
    }
}

Уместно ли использовать CompletableFuture таким образом (вызывая join () много раз, что будетпосле относительно короткого периода будет завершено будущее)? Или я должен использовать флаг и ждать / уведомлять? Вышеупомянутый подход более понятен, но документы CompletableFuture не указывают, можно ли многократно вызывать join.

1 Ответ

0 голосов
/ 10 ноября 2019

Ваш подход действителен. Однако размер кода можно оптимизировать, заменив join на get:

public class FooService {
    private final CompletableFuture<Void> loaded;
    public FooService() {
        this.loaded = CompletableFuture.supplyAsync(() -> {
           // Do some task that shouldn't hold up constructing
            return something;
        });
   }

    public Foo get(String bar) {
        return this.loaded.get(); // Ensure we have loaded everything before continuing
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...