当前位置: 首页 > wzjs >正文

想自己做淘宝有什么网站吗智信建设职业培训学校网站

想自己做淘宝有什么网站吗,智信建设职业培训学校网站,三大网络架构,线上商城介绍文章目录前言一、CopyOnWriteArrayList是什么?二、如何使用三、底层方法实现3.1 add()3.2 remove()3.3 set()3.4 get()前言 一、CopyOnWriteArrayList是什么? CopyOnWriteArrayList是一个线程安全的集合,是List接口的实现类。它是用Reentra…

文章目录

  • 前言
  • 一、CopyOnWriteArrayList是什么?
  • 二、如何使用
  • 三、底层方法实现
    • 3.1 add()
    • 3.2 remove()
    • 3.3 set()
    • 3.4 get()


前言

一、CopyOnWriteArrayList是什么?

CopyOnWriteArrayList是一个线程安全的集合,是List接口的实现类。它是用ReentrantLock来保证线程安全的,其用法和List接口下其他的实现类相差不大。


二、如何使用

public static void main(String[] args) {// List接口下线程安全的集合CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();// 修改操作(加锁)// 1. 添加list.add("a");list.add("b");list.add("c");// 2. 删除list.remove(0);// 3. 修改list.set(1, "d");// 查询操作(不加锁)String s = list.get(1);System.out.println(s);System.out.println(list);}

三、底层方法实现

3.1 add()

源代码如下:

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();}}

实现概述: 加锁后复制原数组并扩容1位,在新数组末尾添加元素,最后替换底层数组引用。体现了"写时复制"的核心思想。

3.2 remove()

源代码如下:

public E remove(int index) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;E oldValue = get(elements, index);int numMoved = len - index - 1;if (numMoved == 0)setArray(Arrays.copyOf(elements, len - 1));else {Object[] newElements = new Object[len - 1];System.arraycopy(elements, 0, newElements, 0, index);System.arraycopy(elements, index + 1, newElements, index,numMoved);setArray(newElements);}return oldValue;} finally {lock.unlock();}}

实现复述:加锁后创建缩容1位的新数组,分两种情况处理:如果是最后一位元素直接截断,否则删除中间元素并分两段复制到新数组中。

3.3 set()

源代码如下:

public E set(int index, E element) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();E oldValue = get(elements, index);if (oldValue != element) {int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len);newElements[index] = element;setArray(newElements);} else {// Not quite a no-op; ensures volatile write semanticssetArray(elements);}return oldValue;} finally {lock.unlock();}}

实现概述: 加锁后先比较新旧值,如果不同则复制整个数组并修改指定位置的元素,相同时也要调用setArray()确保数组中的内容是最新的。

3.4 get()

源代码如下:

private E get(Object[] a, int index) {return (E) a[index];
}

实现概述: 无锁操作,直接从volatile数组中获取指定位置的元素,保证了读操作的高性能。


http://www.dtcms.com/wzjs/604583.html

相关文章:

  • 网站特点网站建设空间选择的重要性
  • 河北做网站找谁外贸网站外链平台
  • 中山哪家做网站的好网站架构怎么看
  • 报价网站制作一个ip 做2个网站吗
  • 网站加地图标记免费学编程的网站有哪些
  • 九亭 网站建设科讯cms 网站地图
  • 精美公司网站源码如何给网站做301重定向
  • 教育 高校 网站模板网页页面下载
  • 怎样设计个人网站产品展示网站设计
  • 中城投建设集团网站网站建设设计视频
  • 一流网站建设公司帝国网站如何做中英文切换
  • 西安旅游服务网站建设上海闵行天气
  • 怎么看网站开发用的语言公司以前做的免费网站太多 新网站搜索不到
  • 免费建站优化sem包括网站建设吗
  • app开发制作定制外包26seo是干什么的
  • 广州门户网站制作公司广东 品牌网站建设
  • 杭州网站案列妇产科网站建设
  • 做移动类网站的书推荐软件开发工具的重要性
  • 苏州建设银行网站首页wordpress英文模板
  • 网站横幅js代码小型行业网站建设维护成本
  • 网站建设小程序山东那个网站可以看高速的建设情况
  • 青岛商媒做网站怎么样在线制作非主流流光闪字 急切网
  • 江苏省建设厅的官方网站wordpress看不到表格
  • 番禺建网站公司天元建设集团有限公司怎么样
  • 黄石企业网站设计秦皇岛疾控最新通告今天
  • 做网站电话销售重庆做网站个人
  • 建立网站ftp建筑培训课程有哪些
  • 网站建设思路及设计方案辽宁好的百度seo公司
  • 张家口城乡建设局网站如何查公司的工商注册信息
  • 天津网站搜索排名优化苏州建网站皆去苏州聚尚网络