我有一些工作流抽象依赖于接口WorkflowStep
:
public interface WorkflowStep {
public void executeStep();
}
现在我有三个不同的类来实现这个接口:
GetCoordinatesForWaypoints, DisplayDetails, PlaySounds
public class GetCoordinatesForEndpoints implements WorkflowStep {
@Override
public void executeStep() {
new Thread(new Runnable() {
@Override
public void run() {
//download coordinates from open street map
}).start();
}
}
public class DetailsDispatchWorkflow implements DispatchWorkflow {
private List<WorkflowStep> workflowSteps;
public DetailsDispatchWorkflow() {
workflowSteps = new LinkedList<>();
}
@Override
public void start() {
workflowSteps.add(new GetCoordinatesForEndpoints());
workflowSteps.add(new DisplayDetails());
workflowSteps.add(new PlaySounds());
workflowSteps.forEach(WorkflowStep::executeStep);
}
}
ExecutorService executorService = Executors.newFixedThreadPool(5);
CompletableFuture<WorkflowStep> workflowStepCompletableFuture =
CompletableFuture.supplyAsync(() -> new
GetCoordinatesForEndpoints().executeStep(), executorService);
.thenAccept(() -> new DisplayDetails().executeStep(), executorService);
我得到一个错误,编译器不能推断函数接口类型。我的问题是:如何实现以下调用链:
CompletableFuture<WorkflowStep> workflowStepCompletableFuture =
CompletableFuture
.supplyAsync(() -> new GetCoordinatesForEndpoints().executeStep(), executorService)
.thenAccept(() -> new DisplayDetails().executeStep(), executorService)
.thenAcceptAsync(() -> new PlaySounds().executeStep(), executorService);
当所有实例化的对象实现相同的接口时?
您的WorkflowStep
接口基本上等同于runnable
:没有输入,没有输出。因此,在CompletableFuture
API中,应该使用相应的runasync()
和thenrunasync()
方法:
CompletableFuture<Void> workflowStepCompletableFuture =
CompletableFuture
.runAsync(() -> new GetCoordinatesForEndpoints().executeStep(), executorService)
.thenRunAsync(() -> new DisplayDetails().executeStep(), executorService)
.thenRunAsync(() -> new PlaySounds().executeStep(), executorService);
这将使它们都异步运行,但按顺序运行(就像您试图做的那样)。
当然,您还应该从实现中删除线程
创建,以使其更加有用。
Q1。我的理解是。但是超时场景呢? Q2。在哪里检查完整未来的默认超时设置?如何更改它?未来超时后会发生什么?(完成还是异常?) Q3。只要未来“完成”(完成或超时或任何最后阶段),我就需要。是否有保证在未来“完成”后调用的方法?我应该把放在哪里? 从新到完整的未来。更喜欢用Java8回答。谢谢你的帮助。
4.2 接口调用 Camel管理端定义了两个版本的接口。第一版接口路径以"/api/"开头,第二版接口路径以"/api/v2"开头。 两个版本接口的主要区别在于:第二版本接口将更改配置、发布配置文件这两部操作聚合成为一个原子操作。则调用第二版本接口,如果成功,则Nginx当前配置为更改之后的配置;如果失败,则Nginx当前配置为调用接口之前的配置。不会出现不安全的中间状态。 第一版本接口: 更新节
我在架构“ID”中的链接服务器(宿主服务器)上有一个名为“Application”的表。我正在尝试使用< code>sp_help查看相同的详细信息。 但我做不到。问题是:1.sp_help位于schema中。(很明显!)2.但我的表位于另一个名为的模式中。(例如,从ID.Application中选择*) > 我已经将链接服务器添加到我的本地sql server management studio
一般在开始使用tendermint之前, 作为开发者应该最关心的就是abci接口了, 因为这个是和tendermint进行交互的关键。 个人觉得这个也是tendermint的优势之一。 有了这个接口定义才有了实现通用区块链平台的可能。 所以说如果作为一个开发者, 不想了解整个tendermint的流转流程, 只想实现自己特定功能的区块链, 那么这一篇文章至少是应该看得。 我会从客户端创建开始说起,
下面是我试图做的一个非常简单的说明: 最后一个方法调用(consumer.consumer())给了我一个编译器错误 Out projected type’EventConsumer 我知道Kotlin对泛型的要求比Java严格得多,这可能就是它不起作用的原因,但我该如何正确地实现这样的东西呢?
jd.setEnableDebug(OBJECT) 设置是否打开调试开关,此开关对正式版也能生效。 OBJECT 参数说明: 参数名 类型 必填 说明 enableDebug Boolean 是 是否打开调试 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功