首页 > 其他分享 >18. 说说CopyOnWrite

18. 说说CopyOnWrite

时间:2024-12-23 16:08:56浏览次数:3  
标签:容器 elements CopyOnWrite lock len newElements 18

Copy-On-Write,写时复制。当我们往容器添加元素时,不直接往容器添加,而是先将当前容器进行复制,复制出一个新的容器,然后往新的容器添加元素,添加完元素之后,再将原容器的引用指向新容器。这样做的好处就是可以对CopyOnWrite容器进行并发的读而不需要加锁,因为当前容器不会被修改。

点击查看代码
public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock(); //add方法需要加锁
        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();
        }
    }
从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。 缺点: * 内存占用问题。由于CopyOnWrite的写时复制机制,在进行写操作的时候,内存里会同时驻扎两个对象的内存。 * CopyOnWrite容器不能保证数据的实时一致性,可能读取到旧数据。

标签:容器,elements,CopyOnWrite,lock,len,newElements,18
From: https://www.cnblogs.com/tim-zuo/p/18624308

相关文章

  • 原核生物表达异源蛋白--最佳分泌信号肽筛选策略--思路来自2018年的文献
    枯草芽孢杆菌分泌生产异源蛋白的最佳信号肽的系统筛选J.Agric.FoodChem.2018,66,13141−13151原始文献链接:http://pubs.acs.org/action/showCitFormats?doi=10.1021/acs.jafc.8b04183实验方法:构建信号肽库:以α-淀粉酶AmyS作为报告蛋白,构建了一个包含173个Sec型信......
  • 国标GB28181视频平台EasyCVR关于服务器端如何配置以支持更好的RTSP流传输?
    在现代视频监控系统中,RTSP流传输因其实时性和高效性被广泛应用于各种场景。然而,为了确保服务器端能够支持更好的RTSP流传输,并在Web端实现流畅播放,需要进行一系列的配置和优化。本文将详细介绍服务器端配置的最佳实践,以及如何利用EasyCVR平台解决RTSP在Web端的播放问题。一、服务......
  • Averaging Weights Leads to Wider Optima and Better Generalization(SWA2018-2019)平
    第一部分:解决的问题论文解决的是深度神经网络优化过程中模型的泛化能力提升问题。具体来说:背景问题:在深度学习中,SGD(随机梯度下降)及其变种是主要的优化方法,但其找到的解通常在权重空间中是“尖锐(参数稍微变一点损失函数就会变化很大)的”(sharpminima),对模型泛化性能有负面影......
  • 2024-2025-1 20241318M《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13这个作业的目标<自学教材《C语言程序设计》第12章并完成云班课测试>||作业正文|https://i.cnbl......
  • [USACO2018Jan白银] 牛tube (MooTube)
    题目描述在业余时间,FarmerJohn创建了一个新的视频共享服务,他将其命名为MooTube。在MooTube上,FarmerJohn的奶牛可以录制,分享和发现许多有趣的视频。他的奶牛已经发布了 N个视频(1≤N≤5000),为了方便将其编号为1…N 。然而,FJ无法弄清楚如何帮助他的奶牛找到他们可能喜......
  • 【唐叔学算法】第18天:解密选择排序的双重魅力-直接选择排序与堆排序的Java实现及性能
    引言在数据排序的世界里,选择排序是一类简单而直观的算法,它通过不断选取未排序部分中的最小(或最大)元素来逐步构建有序序列。今天,我们将深入探讨两种基于选择思想的排序方法——直接选择排序和堆排序,并提供它们的Java实现代码。此外,我们还会分析这两种排序算法的时间复杂度和......
  • 【Qualcomm】IPQ5018获取TR069 WiFi 接口Stats状态方法
    IPQ5018简介    IPQ5018是高通(Qualcomm)公司推出的一款面向网络设备的系统级芯片(SoC)。它通常用于路由器、接入点和其他网络设备中,提供高性能的无线网络连接。以下是关于IPQ5018的一些关键特性和功能:关键特性高性能处理器IPQ5018集成了多核CPU,通常是ARM架构,......
  • 记录我的 oi 生涯(2018.9~2024.11)
    写在最前面现在想来,貌似我第一次听说并接触dev-c++可能是在小学二年级的时候。那时候我在上一个机器人搭建兴趣课,老师(好像姓陈?)给我们展示了有关于编程的软件,并向我们许诺会在四年级的时候教学。不过我在三升四的那个暑假就已经不上那个课了,也不知道他后来真的教了没有。接下......
  • [CTSC2018] 暴力写挂
    两棵树,考虑枚举第一棵树的LCA。由于贡献是对称的,用dsuontree把答案变成\(O(n\logn)\)个询问。每个询问形如:查询第一棵树上dfn在一个区间里的点\(p\in[l,r]\)和点\(u\)在第二棵树上的LCA的深度和\(p\)的权值和的最大值。可以在第二颗树上DFS的过程中维护每......
  • 德普微一级代理 DP032N06PGN DP032N06BGN DPMOS N-MOSFET 60V 180A 2.4mΩ
    Features• Uses advanced MOSFET-DPMOS2 technology• ExtremelylowRDS(on)/High Speed Power Switching• Excellent QgxRDS(on) product(FOM)• Qualified according to JEDEC criteriaProduct SummaryApplications• Motor control and dri......