不可变对象是线程安全的

笑着哭i 提交于 2019-12-02 23:00:52

不可变对象需要满足的条件

 1 对象创建以后其状态就不能修改

 2 对象所有域都是final类型 (这样只能对每个域赋值一次,通过构造器初始化所有成员,进行深度拷贝,在get方法中不直接返回对象本身,而是克隆对象并返回克隆)

 3 对象是正确创建的(在对象创建期间,this引用没有逸出)

public class ImmutableObject {

    private final Integer a = 1;
    private final String b = "2";
    private final Map<Integer, Integer> map = new HashMap<>();

    public ImmutableObject() {
        map.put(1, 2);
        map.put(3, 4);
        map.put(5, 6);
    }

    public Map<Integer, Integer> getMap() {
        // 返回的是新new的map,并且不允许修改
        return Collections.unmodifiableMap(map);
    }

}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!