不可变对象是线程安全的

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

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

}

猜你喜欢

转载自www.cnblogs.com/moris5013/p/11766217.html
今日推荐