当前位置:  开发笔记 > 编程语言 > 正文

CompletableFuture,可变对象和内存可见性

如何解决《CompletableFuture,可变对象和内存可见性》经验,为你挑选了0个好方法。

我试图理解CompletableFutureJava 8 如何与Java内存模型交互.在我看来,对于程序员的理智,理想情况下应该成立:

    完成任务的线程中的操作CompletableFuture - 在执行任何完成相关的阶段之前

    在该线程操作注册完成创建依赖阶段发生,之前完成执行依赖阶段

java.util.concurrent文档中有一条说明:

在提交Runnable到执行之前的线程中的操作Executor - 在执行开始之前.同样的Callables提交给ExecutorService.

这表明第一个属性为true,只要完成未来的线程执行完成依赖阶段或将其提交给Executor.另一方面,在阅读CompletableFuture文档后,我不太确定:

为非异步方法的依赖完成提供的动作可以由完成当前的线程执行CompletableFuture,或者由完成方法的任何其他调用者执行.

这让我想到了我的问题:

    这两个假设属性是否真实?

    在使用时,是否有任何关于存在或缺乏内存可见性保证的特定文档CompletableFuture


附录:

在具体示例中,请考虑以下代码:

List list1 = new ArrayList<>();
list1.add("foo");

CompletableFuture> future =
        CompletableFuture.supplyAsync(() -> {
            List list2 = new ArrayList<>();
            list2.addAll(list1);
            return list2;
        });

能够保证所有的加入"foo"list1是可见的lambda函数?是否保证添加list1list2依赖阶段是可见的future

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有