美文网首页
并发与高并发课程学习笔记(4)

并发与高并发课程学习笔记(4)

作者: Ukuleler | 来源:发表于2018-05-03 15:41 被阅读0次

    不可变对象

    1.final关键字: 类,方法,变量

        1).修饰类: 不能被继承

        2).修饰方法: 1.锁定方法不被继承类修改.2.效率

        3).修饰变量: 基本数据类型变量,引用变量

    其中final 修饰的基本类型变量,线程是安全的,但是在修饰比如map引用数据类型的时候,就会出现问题

    @Slf4j

    @NotThreadSafe

    public class ImmutableExample1 {

    private static final Mapmap = Maps.newHashMap();

    static {

    map.put(1,2);

    map.put(3,4);

    map.put(5,6);

    }

    public static void main(String[] args) {

    map.put(1,3);

    log.info("{}",map.get(1));

    }

    }

    这里map用final修饰,但是还是可以修改里面的值,因此不能保证为不可变对象

    那么有没有能够保证引用对象为不可变对象的方法呢,当然是有的

    可以引用对象等于Collections.unmodifiableXX

    eg: map = Collections.unmodifiableMap(map);

    也可以使用guava的immutable类

    eg:

    private final static ImmutableListlist = ImmutableList.of(1,2,3);

    private final static ImmutableSetset = ImmutableSet.copyOf(list);

    private final static ImmutableMapmap = ImmutableMap.of(1,2,3,4);

    private final static ImmutableMapmap2 = ImmutableMap.builder()

    .put(1,2).put(2,3).build();

    相关文章

      网友评论

          本文标题:并发与高并发课程学习笔记(4)

          本文链接:https://www.haomeiwen.com/subject/rwgakftx.html