如何使用CompletableFuture返回值

时间:2015-05-23 14:56:43

标签: java multithreading callable countdownlatch completable-future

我创建了一个示例,我想知道如何使用CompletableFuture返回值?我还将CompletableFuture<Void> exeFutureList更改为CompletableFuture<Integer> exeFutureList,但eclipse总是建议 把它设置回Void。

请告诉我如何使用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 个答案:

答案 0 :(得分:10)

Runnable只是一个run方法的接口,不会返回任何内容。

因此,您使用的runAsync方法会返回CompletableFuture<Void>

您需要使用supplyAsync方法提交Supplier

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

您也可以创建自己的Supplier<Integer>实现,而不是使用lambda。