不可变对象是线程安全的

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

 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);
    }

}

 

posted @ 2019-10-30 17:16  踏月而来  阅读(589)  评论(0编辑  收藏  举报