【发布时间】:2015-05-16 05:35:06
【问题描述】:
我正在研究 Java 8 CompletableFuture(在 Scala 或 JS 等语言中的 Promise)。
可能是我做错了什么或者没有找到任何描述。设置几个回调后返回的未来返回完全独立的未来。
我对此进行了一些单元测试:
public class FutureTest {
private boolean stage1;
private boolean stage2;
@Before
public void setUp() throws Exception {
this.stage1 = false;
this.stage2 = false;
}
@Test
public void testCombinationOfCallbacks() throws Exception {
final CompletableFuture<String> future = new CompletableFuture<>();
future
.whenComplete((s, e) -> stage1 = true)
.whenComplete((s, e) -> stage2 = true);
future.complete("done");
assertTrue(stage1);
assertTrue(stage2);
assertEquals("done", future.get());
}
@Test
public void testCombinationOfCallbacksCalledOnReturnedFuture() throws Exception {
final CompletableFuture<String> future = new CompletableFuture<>();
final CompletableFuture<String> returnedFuture = future
.whenComplete((s, e) -> stage1 = true)
.whenComplete((s, e) -> stage2 = true);
returnedFuture.complete("done");
assertFalse(future.isDone());
assertFalse(stage1);
assertFalse(stage2);
}
}
正如您在第二个测试中看到的那样,最初创建的未来不受通过回调完成未来的事实的影响。所以基本上回调是在创建的未来上设置的,但不返回未来。
表示你从来没有做过这样的事情:
private CompletableFuture<String> createFuture() {
return new CompletableFuture<String>()
.whenComplete((s, e) -> stage1 = true)
.whenComplete((s, e) -> stage2 = true);
}
它是否记录在 JavaDocs 的某个地方?
【问题讨论】: