gpt4 book ai didi

java - 完成 future : several tasks

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

如何使用 5 个 CompletableFutures 异步执行 20 个 Runnable 任务(或 1 个任务 20 次)?

这就是我所拥有的:

Runnable task = () -> {
long startTime = System.currentTimeMillis();
Random random = new Random();

while (System.currentTimeMillis() - startTime < 3000) {
DoubleStream.generate(() -> random.nextDouble())
.limit(random.nextInt(100))
.map(n -> Math.cos(n))
.sum();
}
System.out.println("Done");
};

for (int i = 0; i < 4; i++) {
CompletableFuture<Void> future1 = CompletableFuture.runAsync(task);
CompletableFuture<Void> future2 = CompletableFuture.runAsync(task);
CompletableFuture<Void> future3 = CompletableFuture.runAsync(task);
CompletableFuture<Void> future4 = CompletableFuture.runAsync(task);
CompletableFuture<Void> future5 = CompletableFuture.runAsync(task);
future1.get();
future2.get();
future3.get();
future4.get();
future5.get();
}

如果我执行这段代码,我可以看到它只异步运行 3 个 future.get() :3,然后是 1 次 for() 迭代过程中剩下的 2

所以,我想尽可能异步地完成所有 20 项任务

最佳答案

您可以使用 allOf 将多个任务作为一个任务同时运行。首先,我创建了 5 个任务的组合(与您的问题相同),但随后我添加了 10 个任务(并且只慢跑两次),并获得了一半的执行时间。

for (int i = 0; i < 2; i++) {
CompletableFuture<Void> future1 = CompletableFuture.runAsync(task);
CompletableFuture<Void> future2 = CompletableFuture.runAsync(task);
// and so on until ten
CompletableFuture<Void> future10 = CompletableFuture.runAsync(task);

CompletableFuture<Void> combined = CompletableFuture.allOf(future1, future2, future3, future4, future5, future6, future7, future8, future9, future10);

combined.get();
}

关于java - 完成 future : several tasks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839557/

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