首页 > 解决方案 > CompletableFuture 的 thenAccept 保证可见性

问题描述

我试图了解是否有任何可见性保证由CompletableFuture.

假设我有一个名为的类SampleClass,如下所示:

public class SampleClass {
    private String member1;
    private String member2;
    // getters, setters and constructor;
}

我做这样的事情:

SampleClass sampleClass = new SampleClass();

CompletableFuture<Void> cf1 = CompletableFuture.supplyAsync(() -> "Hello")
        .thenAccept(sampleClass::setMember1);

CompletableFuture<Void> cf2 = CompletableFuture.supplyAsync(() -> " World")
        .thenAccept(sampleClass::setMember2);

cf1.join();
cf2.join();

// sout(sampleClass);

现在,我想了解在sout声明中,是否存在成员之一或两个成员未初始化的情况?

基本上这里有提供任何可见性保证CompletableFuture吗?(我的印象是,CompletableFuture上面的代码没有提供这样的保证。)

我已经解决了这个问题,但我认为这不是我需要的。

标签: javacompletable-futurejava-memory-modelmemory-visibility

解决方案


推荐阅读