CopyOnWriteArrayList是一个线程安全的ArrayList(ArrayList 是基于数组实现的动态数据,是线程不安全的)。它通过添加一把互斥锁ReentrantLock来保证线程安全。对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的。同时因为获取---修改---写入三步操作并不是原子性的,所以在增删改的过程中都使用了独占锁,来保证在某个时间只有一个线程能对list数组进行修改

每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,ReentrantLock独占锁对象用来保证同时只有一个线程对array进行修改。

CopyOnWriteArrayList的一些方法:

add()方法

public boolean add(E e) {//(1)获取独占锁final ReentrantLock lock = this.lock;//加锁lock.lock();try {//(2)获取到当前List集合保存数据的数组Object[] elements = getArray();//获取该数组的长度int len = elements.length;//(3&#

Java面试笔记:CopyOnWriteArrayList是怎么保证线程安全的?相关推荐

  1. java面试笔记二:java的面向对象

    java面试笔记二:面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现. 对象就是将函数,属性的一种封装.用人们思考习惯的方式思考问题. 匿名对象 即:创建对象时没有指定 ...

  2. 半年面试,我总结出了java面试笔记

    Java面试宝典产生自我准备面试的过程,当时网上找了些试题,但是没答案,然后一边梳理自己的知识,一般结合自己平时钻研的知识和工作经验,自己对试题进行了整理,解答. 也凭借着这次梳理,面试一路过关斩将, ...

  3. 【java读书笔记】ThreadGroup和钩子线程的使用

    文章目录 ThreadGroup介绍 ThreadGroup的基本操作 ThreadGroup的其他方法 钩子线程 用hook线程模拟防重复启动程序 ThreadGroup介绍 ThreadGroup ...

  4. java面试笔记整理

    面向对象思想 描述对象及其相互之间关系 对象是属性及其操作的封装类,是类的实例. 实例关系和继承关系是对象之间的静态关系:消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式:方法是消息的序列. ...

  5. Java面试笔记的天花板,禁止无效学习浪费脑细胞

    前言 大家好,最近一周,我花了不少时间,给大家整理了一套 2022 跳槽涨薪的面试资料. 包括各大厂最新面试题以及面经(22份)还有涉及JVM,Mysql,并发,Spring,Mybatis,Redi ...

  6. 【Java EE 初阶】如何保证线程安全二

    目录 线程安全[一] 1.线程不安全是什么? 2.线程不安全的成因 3.解决线程不安全之一Synchronized关键字(监视器锁) 1.Synchronized使用方法 2.锁对象是什么? 3.锁对 ...

  7. 小青龙Java面试笔记二(进阶知识总结)

    MySql 一.基础 1. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项. 第二范式:要求实体的属性完全依赖于主关键字.所谓完全 依赖是指不能存在仅 ...

  8. 【Java面试高频-多线程】- 三个线程分别负责打印A,B和C,循环100次

    (2)面试真题-三个线程分别负责打印A,B和C,循环100次 a.ReentrantLock和Condition来完成这项工作 package com.lcz.thread; // 三个线程 // 匿 ...

  9. 400 多页的 Java 面试笔记,各个公司面试真题!

    很多人都在纠结面试要准备什么,当时是要具体岗位具体对待了! 如果你现在还没有想好到底要面什么的公司,具体哪个职位的话,那就先把大多数公司会考的技术点搞清楚- 我最近研究了一下各大厂 Java 岗位 J ...

最新文章

  1. 汉字转拼音插件:LM-PinYin.js
  2. sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
  3. vue路由切换和用location切换url的区别
  4. javascript判断日期奇偶_js中判断奇数或偶数
  5. html textarea粘贴事件,javascript在textarea中捕获粘贴事件
  6. pandasSeries模块
  7. DSPF28335学习笔记之(1)CMD文件说明
  8. PHP最高权限的获取
  9. HTML常用标签(三)
  10. ftp客户端安装,六款可以安装的ftp客户端
  11. 《 人机交互技术》第三章 交互设备
  12. 浅析API网关——Ocelot[网关]+Consul[服务发现负载均衡]+Polly[服务熔断]+Ids4[服务认证]
  13. python从邮箱获取指定邮件_用python提取并统计指定邮箱里的特定邮件 | 学步园
  14. 计算三角形面积 java_java 三角形面积计算(文件读取)
  15. php中的ol标签,html ol标签的使用与定义详解
  16. 光猫虚拟服务器无法使用,光猫怎么配置虚拟服务器
  17. 实在受不了360流氓浏览器用了10年终于不用了
  18. 电脑CPU名称修改装逼工具
  19. 201421440018王坤的作业一
  20. 互联网人养娃行为大赏

热门文章

  1. 中级计算机证书需要什么,招教考试需要的计算机中级证书
  2. vue-router.esm.js?fe87:16 [vue-router] Duplicate named routes definition:
  3. 学校购买了若干台电计算机,某学校计划购买若干台电.doc
  4. .bat和.sh命令一条命令分行写
  5. Object类转集合 Java
  6. java小技巧(1/n)
  7. Java Integer取值范围是多少呢?
  8. Java游戏服务器开发之十二--数据库连接整合mybatis
  9. linux之u_boot移植
  10. 探讨getchar与scanf的区别