Java面试笔记:CopyOnWriteArrayList是怎么保证线程安全的?
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是怎么保证线程安全的?相关推荐
- java面试笔记二:java的面向对象
java面试笔记二:面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现. 对象就是将函数,属性的一种封装.用人们思考习惯的方式思考问题. 匿名对象 即:创建对象时没有指定 ...
- 半年面试,我总结出了java面试笔记
Java面试宝典产生自我准备面试的过程,当时网上找了些试题,但是没答案,然后一边梳理自己的知识,一般结合自己平时钻研的知识和工作经验,自己对试题进行了整理,解答. 也凭借着这次梳理,面试一路过关斩将, ...
- 【java读书笔记】ThreadGroup和钩子线程的使用
文章目录 ThreadGroup介绍 ThreadGroup的基本操作 ThreadGroup的其他方法 钩子线程 用hook线程模拟防重复启动程序 ThreadGroup介绍 ThreadGroup ...
- java面试笔记整理
面向对象思想 描述对象及其相互之间关系 对象是属性及其操作的封装类,是类的实例. 实例关系和继承关系是对象之间的静态关系:消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式:方法是消息的序列. ...
- Java面试笔记的天花板,禁止无效学习浪费脑细胞
前言 大家好,最近一周,我花了不少时间,给大家整理了一套 2022 跳槽涨薪的面试资料. 包括各大厂最新面试题以及面经(22份)还有涉及JVM,Mysql,并发,Spring,Mybatis,Redi ...
- 【Java EE 初阶】如何保证线程安全二
目录 线程安全[一] 1.线程不安全是什么? 2.线程不安全的成因 3.解决线程不安全之一Synchronized关键字(监视器锁) 1.Synchronized使用方法 2.锁对象是什么? 3.锁对 ...
- 小青龙Java面试笔记二(进阶知识总结)
MySql 一.基础 1. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项. 第二范式:要求实体的属性完全依赖于主关键字.所谓完全 依赖是指不能存在仅 ...
- 【Java面试高频-多线程】- 三个线程分别负责打印A,B和C,循环100次
(2)面试真题-三个线程分别负责打印A,B和C,循环100次 a.ReentrantLock和Condition来完成这项工作 package com.lcz.thread; // 三个线程 // 匿 ...
- 400 多页的 Java 面试笔记,各个公司面试真题!
很多人都在纠结面试要准备什么,当时是要具体岗位具体对待了! 如果你现在还没有想好到底要面什么的公司,具体哪个职位的话,那就先把大多数公司会考的技术点搞清楚- 我最近研究了一下各大厂 Java 岗位 J ...
最新文章
- 汉字转拼音插件:LM-PinYin.js
- sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
- vue路由切换和用location切换url的区别
- javascript判断日期奇偶_js中判断奇数或偶数
- html textarea粘贴事件,javascript在textarea中捕获粘贴事件
- pandasSeries模块
- DSPF28335学习笔记之(1)CMD文件说明
- PHP最高权限的获取
- HTML常用标签(三)
- ftp客户端安装,六款可以安装的ftp客户端
- 《 人机交互技术》第三章 交互设备
- 浅析API网关——Ocelot[网关]+Consul[服务发现负载均衡]+Polly[服务熔断]+Ids4[服务认证]
- python从邮箱获取指定邮件_用python提取并统计指定邮箱里的特定邮件 | 学步园
- 计算三角形面积 java_java 三角形面积计算(文件读取)
- php中的ol标签,html ol标签的使用与定义详解
- 光猫虚拟服务器无法使用,光猫怎么配置虚拟服务器
- 实在受不了360流氓浏览器用了10年终于不用了
- 电脑CPU名称修改装逼工具
- 201421440018王坤的作业一
- 互联网人养娃行为大赏
热门文章
- 中级计算机证书需要什么,招教考试需要的计算机中级证书
- vue-router.esm.js?fe87:16 [vue-router] Duplicate named routes definition:
- 学校购买了若干台电计算机,某学校计划购买若干台电.doc
- .bat和.sh命令一条命令分行写
- Object类转集合 Java
- java小技巧(1/n)
- Java Integer取值范围是多少呢?
- Java游戏服务器开发之十二--数据库连接整合mybatis
- linux之u_boot移植
- 探讨getchar与scanf的区别