gpt4 book ai didi

java - 可以传递给 ExecutorService 的对象,并且 Runnable 之间具有依赖关系

转载 作者:行者123 更新时间:2023-12-02 03:38:20 25 4
gpt4 key购买 nike

我正在尝试创建一个具有依赖关系的对象。关键是,具有 ExecutorService 的类和生成 Runnables 的类是不同的。这是简单的抽象:

public class Main {
private ExecutorService pool; // Initialized before executing main
public static void main(String[] args) {
List<Batch> batches = // fetching...
for(Batch batch : batches) {
Runnable r = batch.getRunnable();
pool.submit(r);
}
}
}

public class Batch {
public Runnable getRunnable() {
Runnable r1 = // creating...
Runnable r2 = // creating...
// FIXME: demand that r2 run after r1 finishes
return // something suitable. r1? r2? or new Runnable?
}
}

当这些类是一个时,我曾经使用 CompletableFuture:

CompletableFuture.runAsync(r1, pool)
.thenRunAsync(r2, pool)
.exceptionally(ex -> { // Do something });

但是现在pool驻留在另一个类中。我更多地查看了 CompletableFuture 类的文档,但我仍然不确定它是否有帮助。

有人了解这方面的知识吗?

最佳答案

对于线性依赖关系,您可以只返回一个新的 Runnable 来逐一执行任务。这样您就可以完全控制执行顺序。 Runnable 列表不能保证顺序 - 您还需要其他类遵守约定。

public Runnable getRunnable() {
Runnable r1 = ...
Runnable r2 = ...
return ()->{
r1.run();
r2.run();
};
}

我实际上有一个支持可运行依赖图的想法,但不确定什么时候会有用。有时间后我会尝试编写它。

关于java - 可以传递给 ExecutorService 的对象,并且 Runnable 之间具有依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37159536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com