gpt4 book ai didi

java - CompletableFuture 的 obtrudeValue() 方法如何工作?

转载 作者:行者123 更新时间:2023-11-30 10:09:04 25 4
gpt4 key购买 nike

根据 oracle 文档 obtrudeValue(T value) 方法“强制设置或重置方法 get() 和相关方法随后返回的值,无论是否已经完成。此方法仅用于错误恢复操作,并且即使在这种情况下,也可能会导致使用既定结果与覆盖结果的持续依赖完成。”

引用: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#obtrudeValue-T-

我在谷歌上搜索了很多,但无法理解这种 obtrudeValue 方法会导致什么问题。谁能帮助我理解以下内容:

  • 使用 obtrudeValue 方法安全吗?
  • 如果使用 obtrudeValue 不安全,那么可以使用 CompletableFuture 的哪个方法来读取异步值?
  • 在什么情况下 obtrudeValue 方法会导致问题?

非常感谢您。

最佳答案

ObtrudeValue 简单地设置/覆盖 CompletableFuture 的结果(无论如何 future 是否完成都无关紧要)。

您不应该使用此方法来设置 CompletableFuture 的结果。

在大多数情况下,您应该使用方法complete 或方法completeExceptionally。这些方法是安全的,并保证只有在 future 未完成时才设置结果,并且结果不能被后续调用这些方法更改,因此当您调用 get() 方法时,您总是得到这些设置的第一个结果方法。

您总是通过调用 get 方法从 CompletableFuture 获取异步值。

您应该只在非常特殊的情况下使用 ObtrudeValue,当您想要从一些不正确的状态中恢复时,您可以重置/覆盖以前的值。

例子:

CompletableFuture<String> fut = new CompletableFuture<>();
fut.complete("test1");
System.out.println(fut.get()); // test1
fut.complete("test2");
System.out.println(fut.get()); // test1 , value not overwritten

fut.obtrudeValue("obtrudeValue");
System.out.println(fut.get()); // obtrudeValue , overwrite the value even of completed future
fut.obtrudeValue("newObtrudeValue");
System.out.println(fut.get()); // newObtrudeValue , subsequent call overwrite the value

fut.complete("test3");
System.out.println(fut.get()); // newObtrudeValue , value not overwritten by calling complete

关于java - CompletableFuture 的 obtrudeValue() 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53468550/

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