Получить Callable значение, используя CompletableFuture или Future Object - PullRequest
0 голосов
/ 25 марта 2020

Метод Future.get () является методом блокировки, я просто хочу, чтобы мой метод main не беспокоился о f.get () и продолжил его выполнение.

Как получить возвращаемое значение из Future или CompletableFuture без ущерба для выполнения основного потока и без использования l oop для постоянной проверки с использованием isDone ()

        FutureTask<String> result = (FutureTask<String>) es.submit(new Helloo());
//      CompletableFuture<String> r =  CompletableFuture.supplyAsync(()a -> new Hello(), es);
        Future<String> r = es.submit(new Hello());
        es.execute(()->{System.out.println("hello");});
                System.out.println("Main");

                System.out.println("Main");
                System.out.println("Main");
                System.out.println("Main");
                System.out.println(r.get());

                System.out.println("Main");
                System.out.println("Main");```

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я полагаю, вы имеете в виду обратный вызов CompletableStage? Что-то вроде CompletableFuture r = CompletableFuture.supplyAsyn c (() a -> new Hello ()). ThenAccept (s -> s + World ());

0 голосов
/ 25 марта 2020

Если вы хотите предоставить (вычислить / сгенерировать / получить / и т. Д. c) какое-то значение, а затем сделать что-то с этим значением асинхронно, вы можете создать CompletableFuture с помощью метода, такого как CompletableFuture.supplyAsyn c. Это вернет экземпляр CompletableFuture.

. С этим экземпляром вы можете вызвать метод thenAccept, который вызовет данный метод Consumer, со значением, предоставленным предыдущим шагом в качестве аргумента. .

Так что-то вроде этого:

CompletableFuture.supplyAsync(aMethodThatWillReturnAString, yourExecutor).thenAccept((string theString) -> {
    System.out.println(theString);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...