Saya membuat contoh, saya ingin tahu bagaimana saya bisa mengembalikan nilai menggunakan CompletableFuture ? Saya juga mengubah CompletableFuture<Void> exeFutureList menjadi CompletableFuture<Integer> exeFutureList tetapi Eclipse selalu menyarankan untuk atur kembali ke Void.

Tolong beri tahu saya cara mengembalikan nilai menggunakan CompletableFuture.

Kode:

    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
user2121 23 Mei 2015, 17:56

1 menjawab

Jawaban Terbaik

Runnable hanyalah antarmuka dengan metode run yang tidak mengembalikan apa pun.

Oleh karena itu runAsync metode yang Anda gunakan mengembalikan CompletableFuture<Void>

Anda harus mengirimkan Supplier, menggunakan supplyAsync metode:

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

Anda juga dapat membuat implementasi Supplier<Integer> Anda sendiri alih-alih menggunakan lambda.

11
Jean Logeart 23 Mei 2015, 18:06