CompletableFuture异步完整的示例
时间: 2023-03-19 08:21:53 浏览: 132
好的,下面是一个使用CompletableFuture实现异步操作的示例:
假设我们有一个方法`fetchUserData`,用于从远程服务器获取用户数据,由于网络延迟等原因,该方法需要一定的时间才能返回数据。我们可以使用CompletableFuture来异步执行该方法,避免阻塞主线程,代码如下:
```
public CompletableFuture<UserData> fetchUserDataAsync() {
CompletableFuture<UserData> future = new CompletableFuture<>();
CompletableFuture.runAsync(() -> {
try {
UserData userData = fetchUserData(); // fetchUserData是一个耗时的操作,可以考虑使用线程池进行优化
future.complete(userData);
} catch (Exception e) {
future.completeExceptionally(e);
}
});
return future;
}
```
在上述代码中,我们创建了一个CompletableFuture对象`future`,并通过`runAsync`方法在一个新的线程中异步执行`fetchUserData`方法。当该方法执行完毕后,我们通过`future.complete`方法将结果返回,或者通过`future.completeExceptionally`方法将异常信息返回。
现在,我们可以在主线程中调用`fetchUserDataAsync`方法,并通过`thenApply`方法在获取到用户数据后进行一些处理,如下所示:
```
CompletableFuture<UserData> future = fetchUserDataAsync();
future.thenApply(userData -> {
// 对获取到的用户数据进行处理
return someResult;
}).thenAccept(result -> {
// 处理完毕后,输出结果
System.out.println(result);
});
```
在上述代码中,我们通过`thenApply`方法将对用户数据的处理逻辑传递给CompletableFuture对象,当该对象获取到用户数据后,将自动执行该逻辑,并将处理结果返回。然后,我们又通过`thenAccept`方法将对处理结果的输出逻辑传递给CompletableFuture对象,当该对象处理完毕后,将自动执行该逻辑,并输出结果。
以上就是一个使用CompletableFuture实现异步操作的完整示例。
阅读全文