gpt4 book ai didi

java - 如何创建一个使用缓存值的 CompletableFuture?

转载 作者:行者123 更新时间:2023-11-30 07:48:34 31 4
gpt4 key购买 nike

我熟悉使用 Guava 的 Suppliers.memoizeWithExpiration()CacheBuilder缓存延迟加载值。

我很难弄清楚如何对异步加载的值执行相同的操作(使用 CompletableFuture )。

具体来说,我想要一种返回 CompletableFuture 的机制如果可用,它将返回一个缓存值;否则,计算并缓存该值。

恐怕如果我使用 Supplier<CompletableFuture<Integer>> cache = Suppliers.memoize()然后供应商将缓存 CompletableFuture但消费者每次都会重新运行管道。

我有哪些选择?

最佳答案

快速测试消除了我的恐惧:

public final class Testcase
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
Random random = new Random();
Supplier<CompletableFuture<Integer>> cache = Suppliers.memoize(() ->
{
return CompletableFuture.supplyAsync(() ->
{
return random.nextInt();
});
});
for (int i = 0; i < 10; ++i)
System.out.println(cache.get().get());
}
}

输出:

1171697378
1171697378
1171697378
1171697378
1171697378
1171697378
1171697378
1171697378
1171697378
1171697378

现在想想,我意识到 Supplier 每次都会返回相同的 CompletableFuture 实例,一旦 CompletableFuture 完成,它就是保证每次都返回相同的值。所以我们很安全。

关于java - 如何创建一个使用缓存值的 CompletableFuture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49099554/

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