- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个有很多 CompletableFuture.completedFuture ... thenAccept
代码的项目,例如
public CompletableFuture<Boolean> callee() {
boolean result = ... // Do something and get result - Step A
return CompletableFuture.completedFuture(Boolean.valueOf(result));
}
public void caller() {
callee().thenAccept(result -> {
// Detect if call success or failure - Step B
new Throwable().printStackTrace(); // the debug code: stacktrace shows it is called from caller
});
}
我得出结论,步骤 A 和步骤 B 在一个线程中顺序调用。
那么我可以这样简化吗?
public boolean callee() {
boolean result = ... // Do something and get result
return result;
}
public void caller() {
boolean result = callee();
// Detect if call success or failure
}
最佳答案
是的,你可以这样简化它。长版:
我认为问题应该是:“CompletableFuture
的这种用法是否合适?”。不,这不对。此代码使用 CompletableFuture
作为包装器、包来传递数据,而不是作为异步执行代码的工具。此工具可以用于在线程之间传递数据,但这不是这段代码的作用。
调用 CompletableFuture.completedFuture
除了创建一个新的 CompletableFuture
之外什么都不做,无论你传递给方法什么,它都会完成。然后你在上面调用thenAccept
,它基本上有以下效果:“完成后取出结果,让已经计算出结果的线程执行下面的代码。如果结果已经计算出来,让调用者自己执行以下代码。” “以下代码”只是您传递给 thenAccept
的 lambda。
初始的 CompletableFuture
立即完成,随后的代码由直接调用 thenAccept
的线程执行。执行 caller
和 callee
的线程自己做所有事情。所以这部分实际上是异步的。因此,该代码等同于第二个示例中没有CompletableFuture
的简单代码。
要实际使用 CompletableFuture
,您应该异步运行 boolean result = ...//Do something and get result - Step A
例如使用 CompletableFuture.supplyAsync
创建这个初始 future .链式代码也将异步运行。
关于java - `CompletableFuture.completedFuture ... thenAccept` 相当于顺序处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65377485/
我想调用CompletableFuture.supplyAsync()将阻塞任务委托(delegate)给另一个线程。一旦该任务完成,我希望 CompletableFuture.thenAccept
我想调用 CompletableFuture.supplyAsync() 将阻塞任务委托(delegate)给另一个线程。一旦该任务完成,我希望 CompletableFuture.thenAccep
我正在尝试从使用 CompletableFuture 的方法执行异步调用.完成该任务后,我尝试打印对象 DummyObject 的值,这些值对于调用异步调用的方法是本地的。 我想知道它是如何工作的?线
与某些博客中所述(例如 I can't emphasize this enough: thenAccept()/thenRun() methods do not block )不同,Completab
我正在做一个有很多 CompletableFuture.completedFuture ... thenAccept 代码的项目,例如 public CompletableFuture cal
我正在开发一个与其他网络应用程序通信的网络应用程序。有时,我的系统会向其他系统发送 HTTP 请求作为通知。由于他们的响应对我来说不是必需的,我使用 Java 8 CompletableFuture
我正在尝试从我的 CompletableFuture 中返回一个列表,如下所示: public List get() { CompletableFuture> providersRespons
我正在阅读关于 CompletableFuture 的文档,thenAccept() 的描述是 Returns a new CompletionStage that, when this stage
所以我有一个返回 CompletableFuture 的方法。在返回之前,此方法添加一个带有 thenAccept 的 block ,该 block 在 CompletableFuture 完成后执行
我在 CompletableFuture 的 supplyAsync() 中处理长时间运行的操作,并将结果放入 thenAccept()。有时 thenAccept() 在主线程上执行,但有时它在工作
如何在单元测试中避免手动休眠。假设在下面的代码中,Process 和 notify 处理大约需要 5 秒。所以为了完成处理,我增加了 5 秒的 sleep 时间。 public class Class
如何在单元测试中避免手动休眠。假设在下面的代码中,Process 和 notify 处理大约需要 5 秒。所以为了完成处理,我增加了 5 秒的 sleep 时间。 public class Class
我是一名优秀的程序员,十分优秀!