主功能仅输出1、2和3。为什么run中的Runnable不能同时运行和打印4?
import java.util.concurrent.CompletableFuture;
import java.lang.Thread;
class CF {
static void doSomething() {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
System.out.println("ggwp");
}
}
static CompletableFuture<Void> printAsync(int i) {
return CompletableFuture.runAsync(() -> {
doSomething();
System.out.print(i);
System.out.println(Thread.currentThread().getName());
});
}
public static void main(String[] args) {
printAsync(1).join();
CompletableFuture.allOf(printAsync(2), printAsync(3))
.thenRun(() -> printAsync(4));
doSomething();
}
}
但是,当我改变doWhat函数如下所示,所有的数字1,2,3和4将被打印。
static void doSomething() {
return;
}
正如注释中提到的,. thenRun(()-
从printAsync()
调用doSomething()
,每次调用都会使调用线程Hibernate100毫秒。因此,您没有等待足够长的时间来查看4
的输出。
您可以使用注释中建议的加入
来等待所有提交的任务完成。或者(为了帮助理解正在发生的事情)您可以向doWhat
添加一个参数来指定Hibernate的ms量,并在主线程中等待更长时间,如下所示。
这并不是说没有执行printAsync(4)
。相反,jvm终止进程是因为所有非守护进程线程(在本例中是主线程)都在该点之前完成。
import java.util.concurrent.CompletableFuture;
import java.lang.Thread;
class CF {
static void doSomething(long sleep) {
try {
Thread.sleep(sleep);
} catch(InterruptedException e) {
System.out.println("ggwp");
}
}
static CompletableFuture<Void> printAsync(int i) {
return CompletableFuture.runAsync(() -> {
doSomething(100);
System.out.print(i);
System.out.println(Thread.currentThread().getName());
});
}
public static void main(String[] args) {
printAsync(1).join();
CompletableFuture.allOf(printAsync(2), printAsync(3))
.thenRun(() -> printAsync(4));
doSomething(500);
}
}
我是新的完全未来。我试图为元素列表(即参数)调用并行方法,然后将结果组合起来创建最终响应。我还试图设置50毫秒的超时,以便如果调用不返回50毫秒,我将返回默认值。 到目前为止,我已经尝试过: 但我一直得到错误说: 有人能告诉我我在这里做错了什么吗?如果我走错了方向,请纠正我。 谢谢
我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做
是否有一种方法可以在不阻塞事件循环的情况下等待一个未来完成? 我知道这个错误通常意味着什么,但我不知道在这种情况下...我试图在谷歌上搜索它,但没有找到任何关于将哪份清单放在哪里的明确解释。和以前一样,除非是强制性的,我更喜欢一次学一件事。 那么,回到这个问题:“基本”Vert.x是否有一种方法可以在事件循环不受干扰的情况下等待未来?
我目前正在开发我的第一个vert.x服务,我对我的部署是如何实现的并不十分有信心。 我有几个垂直点来接受来自其他服务的请求,并将大量工作委托给其他垂直点。我如何可以旋转每个任务的垂直线并在工作完成后将其杀死,或者通过编程方式将垂直线按任务数量放大。 我目前正在启动时生成十个顶点,并使用事件总线将这些任务分布在顶点上。
我有几个单独的操作,我想以与JS中相同的风格链接这些操作。 所以目前我有这样的代码: 可以在一个链中重写吗?有点:
问题内容: 我尽力而为,但没有找到任何文章和博客可以清楚地比较和,并且提供了很好的分析。 因此,如果任何人都可以向我解释或指向这样的博客或文章,那对我来说真的非常好。 问题答案: 无论 ListenableFuture 和 CompletableFuture 有超过它的父类的优势 未来 通过允许呼叫者在这样或那样的回调“注册”当异步动作已经完成被调用。 使用 Future, 您可以执行以下操作: