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

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

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

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

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

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

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

其他:

HashSet        ->    CopyOnWriteArraySet

TreeSet        ->     ConcurrentSkipListSet

HashMap     ->      ConcurrentHashMap

TreeMap      ->       ConcurrentSkipListMap

图一

如何达到共享对象安全

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

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

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

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

你可能感兴趣的:(并发容器 J.U.C 共享对象安全)