美文网首页
并发容器 J.U.C 共享对象安全

并发容器 J.U.C 共享对象安全

作者: 杨凯飞 | 来源:发表于2018-12-11 10:38 被阅读0次

    ArrayList(线程不安全) --->    CopyOnWriteArrayList(线程安全,读操作时在原有数据上读)

        字面意思:写操作时复制。当对ArrayList进行写操作时,它先将原有数组拷贝一份,然后再新的数组上进行写操作,写完之后再将原来的数组指向新的数组。

        CopyOnWriteArrayList的add操作都是在锁(如图一,锁的概念可以回顾之前写的)下进行的,这样做是为了在并发操作时复制多个副本输出搞乱数据,导致最终数据不是自己期望的值。

        缺点:    因为在写操作时需要拷贝副本,消耗内存。

                       不能用于事实读的场景,所以适合读多写少的场景。

        设计思想:    读写分离,最终一致性,使用时开辟空间,解决并发冲突

    其他:

    HashSet        ->    CopyOnWriteArraySet

    TreeSet        ->     ConcurrentSkipListSet

    HashMap     ->      ConcurrentHashMap

    TreeMap      ->       ConcurrentSkipListMap

    图一

    如何达到共享对象安全

            线程限制:一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改

            共享只读:一个共享只读的对象,在没有同步的情况下,可以被多个线程并发访问,但不可以修改

            线程安全对象:一个线程安全的对象或者容器,在内部通过同步机制来保证线程安全,所以其他线程无需额外的同步就可以通过公共接口随意访问它

            被守护对象:被守护对象只能通过获取特定的锁来访问

    相关文章

      网友评论

          本文标题:并发容器 J.U.C 共享对象安全

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