3

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

Пожалуйста, дайте мне знать, как вернуть значение с помощью 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; 
     } 

    } 
} 

ответ

6

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

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

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

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

Вы также можете создать свой собственный Supplier<Integer> реализации вместо того, чтобы использовать лямбда ,