提个牛角尖问题

来源:8-4 栈封闭技术

洪小才

2022-11-10

/**
 * 描述:     一个属性是对象,但是整体不可变,其他类无法修改set里面的数据
 */
public class ImmutableDemo {

    private final Set<String> students = new HashSet<>();

    public ImmutableDemo() {
        students.add("李小美");
        students.add("王壮");
        students.add("徐福记");
    }

    public boolean isStudent(String name) {
        return students.contains(name);
    }
}

课程里说这是个不可变的对象。
因为老师您两门课我都买过,这里面会不会涉及对象发布不完全的问题,从而不好说对象是不可变的?
就是构造方法而言,多线程环境下,会不会造成students所含对象不同的问题,就是因为没发布完全。所以如果这个对象要发布完全,又得去走工厂方法了?也就是说走了工厂发布的这个对象,才可以说是一个不可变对象?!

之前那门课是3刷了,这门课是进行2刷

写回答

1回答

悟空

2022-11-12

多线程环境下,构造方法应该也是安全的,这个students是属于每个对象自己的。你觉得哪里会不安全呢

0
2
悟空
回复
洪小才
这里的构造方法没有异步线程,所以从构建完成后,就是不可变的了,而构造完成前,也拿不到这个对象来使用。
2022-11-14
共2条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程