J.U.C(一)并发容器CopyOnWrite,SkipList

java.util.concurrent

CopyOnWriteArrayList

ArrayList -> CopyOnWriteArrayList
package java.util.concurrent; J.U.C
适合读多写少,数据不大的
写的时候copy一份来写,写完指向新的那个,写是加锁的,一次只能一个在写

    public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();//锁
        try {
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len + 1);//copy
            newElements[len] = e;//写
            setArray(newElements);//指向新数组
            return true;
        } finally {
            lock.unlock();//释放
        }
    }

读数据就是普通get 没锁,很快

    public E get(int index) {
        return get(getArray(), index);
    }

缺点

  • 如果数据较多 内存消耗大
  • 不能马上读到新数据

设计思想

  • 读写分离
  • 最终一致性
  • 另外开辟空间解决并冲突

HashSet,TreeSet -> CopyOnWriteArraySet,ConcurrentSkipListSet

HashMap‘ TreeMap -> ConcurrentHashMap,ConcurrentSkipListMap

跳表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容