Как вернуть значение с помощью CompletableFuture


Я создал пример, я хочу знать, как я могу вернуть значение, используя CompletableFuture ? Я также изменил CompletableFuture<Void> exeFutureList на CompletableFuture<Integer> exeFutureList , но eclipse всегда предлагает установите его обратно в пустоту.

Пожалуйста, дайте мне знать, как вернуть значение с помощью CompletableFuture.

Код :

    public class MainClass {

    static ExecutorService exe = null;
    static CompletableFuture<Void> exeFutureList = null;

    public static void main(String[] args) {
        exe = Executors.newFixedThreadPool(1);
        exeFutureList = CompletableFuture.runAsync(new RunClass(8), exe);
    }

    static class RunClass implements Runnable {

        private int num;

        public RunClass(int num) {
            // TODO Auto-generated constructor stub
            this.num = num;
        }

        public void run() {
            // TODO Auto-generated method stub
            this.num = this.num + 10;
        }

    }
}
1 5

1 ответ:

Runnable это просто интерфейс с методом run, который ничего не возвращает.

Поэтому runAsync метод, который вы используете возвращает a CompletableFuture<Void>

Вам нужно отправить Supplier, используя supplyAsync метод:

final int arg = 8;
CompletableFuture<Integer> f = CompletableFuture.supplyAsync(() -> {
    return arg + 10;
}, exe);

Вы также можете создать свою собственную реализацию Supplier<Integer> вместо использования лямбды.