`

Copy-On-Write并发容器

    博客分类:
  • java
阅读更多

一,简介

       在JDK1.5以上版本中,提供了CopyOnWriteArrayList,CopyOnWriteArraySet两种并发容器。采用读写分离的思想(读操作在元数据中操作,写操作则在副本中操作),降低锁冲突,提高并发性。

二,实现原理

     

   /**
     *读操作(没有加锁)
     * {@inheritDoc}
     * @throws IndexOutOfBoundsException {@inheritDoc}
     */
    public E get(int index) {
        return (E)(getArray()[index]);
    }

    /**
     * Gets the array.  Non-private so as to also be accessible
     * from CopyOnWriteArraySet class.
     */
    final Object[] getArray() {
        return array;//存放元数据的数组
    }

   /**
    *写操作(加锁的目的:防止并发量大时,产生过多的元数据副本,耗内存)
    */
    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);//对元数据进行拷贝
	    newElements[len] = e;//操作副本
	    setArray(newElements);//修改元数组引用为副本引用
	    return true;
	} finally {
	    lock.unlock();
	}
    }

    /**
     * Sets the array.
     */
    final void setArray(Object[] a) {
        array = a;
    }

 三,应用场景

     对于读多写少的场景(例如:缓存),可以有效减少锁冲突,提示系统并发能力。

分享到:
评论

相关推荐

    并发容器的原理,7大并发容器详解、及使用场景

    2. CopyOnWriteArrayList 和 CopyOnWriteArraySet 是基于写时复制(Copy-On-Write)策略的容器,适用于读多写少的情况。写操作时,会创建一个新的副本并在新副本上进行修改,然后替换原有引用。这使得读操作无需加锁...

    Java从同步容器到并发容器的操作过程

    其中,`CopyOnWriteArrayList`和`CopyOnWriteArraySet`是典型的写时复制(Copy-On-Write,COW)容器,它们在写操作时创建容器副本,确保读操作不会被阻塞,从而提高并发性能。当线程尝试修改容器时,它会先复制一份...

    基于CopyOnWriteArrayList并发容器(实例讲解)

    CopyOnWriteArrayList是一种基于Copy-On-Write机制的并发容器,自JDK 1.5开始提供。它的基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后...

    09、并发容器(Map、List、Set)实战及其原理

    - **Copy-On-Write(写时复制)**:如CopyOnWriteArrayList,写操作时复制整个容器,避免修改时的同步开销。 - **无锁数据结构**:如`AtomicIntegerArray`等原子类,使用CAS(Compare and Swap)操作实现线程安全...

    Java学习资料-并发器

    CopyOnWriteArrayList的设计思想基于“写时复制”(Copy-On-Write, COW)策略,这意味着在写操作时,不会直接修改原有的数组,而是创建一个新的数组副本,然后在副本上进行操作。当写操作完成后,原始引用会被更新为新...

    Java并发CopyOnWrite容器原理解析

    1. Copy-On-Write(COW)机制:写时复制的思想,当我们往一个容器添加元素时,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用...

    闪存数据库的高速更新技术.pptx

    综上所述,闪存数据库的高速更新技术涉及多个方面,包括但不限于日志结构更新、Copy-On-Write、存储引擎优化、内存数据缓冲优化、并发控制与乐观锁策略、智能化优化等。这些技术相互配合,共同推动着闪存数据库向更...

    MyString 字符串类仿写_C++_(四种版本,引用计数,迭代器,加锁)

    接着,`MyString(v2.0)`引入了"写时拷贝"(Copy-on-Write, COW)策略,配合引用计数来提高效率。当两个字符串共享同一内存区域时,只有在其中一个字符串被修改时才真正进行拷贝。引用计数用于跟踪共享同一个数据结构...

    Rust container cheat sheet.pdf

    - Cow:代表“写时复制”(Clone-On-Write)的智能指针类型,它允许在无需写入时共享数据,在需要写入时克隆数据。 - parking_lot:一个优化的并发原语库,例如,它提供的Mutex和RwLock通常比标准库中的对应类型性能...

    Solaris Internals.rar

    ZFS使用Copy-on-Write技术,确保数据安全并简化管理。 3. **DTrace工具**:DTrace是Solaris的一个强大的动态跟踪框架,可以实时监控系统和应用程序的行为,帮助调试和性能优化。开发者和运维人员可以通过编写DTrace...

    理解Linux进程.pdf

    - **Copy On Write (COW)**:一种内存管理技术,允许多个进程共享相同的物理内存页,只有当某个进程修改共享页面时才会创建该页面的副本。 - **File Lock (Flock)**:用于防止多个进程同时访问同一文件的技术。 - **...

    STL 的string类怎么啦

    Copy-On-Write(COW)技术是另一个为了效率而引入的设计,它允许多个string对象共享同一块内存,直到其中一个对象需要修改时才进行复制。然而,这样的设计也可能带来陷阱,如并发访问时的线程安全问题。此外,像...

    2021-2022计算机二级等级考试试题及答案No.17142.docx

    COPYCON PRN允许直接在控制台输入内容并发送到打印机。 16. 装饰设计模式:装饰模式允许动态地给一个对象添加一些额外的职责,装饰对象包含被装饰对象的引用。 17. Java布局管理器:BorderLayout将容器区域分为东...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    copy on write 内联优化 系统优化 cache 延迟计算 数据预读 异步 轮询与通知 内存池 模块化 工程架构能力 开发语言 运维与监控 监控 系统监控 日志监控 流量监控 接口监控 数据库监控 业务监控 ...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

Global site tag (gtag.js) - Google Analytics