CompletableFuture
API相当令人生畏,很多接受,以及thens和其他东西;很难说出为什么存在不同的选择。
CompletableFuture<?> future = CompletableFuture.supplyAsync(() ->..., executor)
future.startNonBlocking...( (...) -> { callback behavior done when complete }
我基本上试图模仿new Thread(() -> dostuff).start()
,但有更好的线程池,错误处理等。注意:我实际上并不需要Runnable
接口,我正在整理一块现有代码。
什么是启动异步任务并在完成时执行行为的正确方法?或处理抛出的异常?
答案 0 :(得分:2)
这是一个简单的异步回调:
CompletableFuture.supplyAsync(() -> [result]).thenAccept(result -> [action]);
或者如果您需要错误处理:
CompletableFuture.supplyAsync(() -> [result]).whenComplete((result, exception) -> {
if (exception != null) {
// handle exception
} else {
// handle result
}
});
答案 1 :(得分:2)
new Thread(() -> dostuff).start()
表示 dostuff 实现 Runnable ,因此您可以使用
static CompletableFuture<Void> runAsync(Runnable runnable)
static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
也