如何使用 CompletableFuture return 一个值
How to return a value using CompletableFuture
我创建了一个示例,我想知道如何使用 CompletableFuture
return 一个值?我还将 CompletableFuture<Void> exeFutureList
更改为 CompletableFuture<Integer> exeFutureList
但 eclipse 总是建议
将其设置回 Void。
请告诉我如何使用 CompletableFuture return 值。
代码:
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;
}
}
}
Runnable
只是一个带有 run
方法的接口,它没有 return 任何东西。
因此,您正在使用的 runAsync
方法 return 是 CompletableFuture<Void>
您需要提交一个Supplier
,使用supplyAsync
方法:
final int arg = 8;
CompletableFuture<Integer> f = CompletableFuture.supplyAsync(() -> {
return arg + 10;
}, exe);
您也可以创建自己的 Supplier<Integer>
实现而不是使用 lambda。
我创建了一个示例,我想知道如何使用 CompletableFuture
return 一个值?我还将 CompletableFuture<Void> exeFutureList
更改为 CompletableFuture<Integer> exeFutureList
但 eclipse 总是建议
将其设置回 Void。
请告诉我如何使用 CompletableFuture return 值。
代码:
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;
}
}
}
Runnable
只是一个带有 run
方法的接口,它没有 return 任何东西。
因此,您正在使用的 runAsync
方法 return 是 CompletableFuture<Void>
您需要提交一个Supplier
,使用supplyAsync
方法:
final int arg = 8;
CompletableFuture<Integer> f = CompletableFuture.supplyAsync(() -> {
return arg + 10;
}, exe);
您也可以创建自己的 Supplier<Integer>
实现而不是使用 lambda。