当前位置: 首页 > 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/97606.html

相关文章:

  • 教育培训机构招生网站建设品牌策略
  • logo免费生成网站做网站企业
  • 泾川县门户网安徽seo优化
  • 做搬家服务网站问卷调查的目的搜索关键词排行榜
  • 资阳市网站建设营销策划方案案例
  • 做模版网站需要租服务器吗无需下载直接进入的网站的代码
  • 全国公安网站备案线下推广
  • 中石化建设工程电子招投标交易网西安网站建设推广优化
  • 用php做网站用到的工具关键词在线采集
  • 济南做网站优化哪家好百度号注册官网
  • php网站开发实例教程代码注册域名要钱吗
  • 青岛外贸网站建站产品推广ppt
  • 北京城乡建设网站首页公司关键词seo
  • 工程造价信息网新疆站长之家seo概况查询
  • 如何办网站 论坛google seo怎么做
  • 建网站有什么好处国外网站seo免费
  • 网站建设应该学什么软件公众号推广方法
  • 做的物流网站有哪些石家庄新闻
  • ai做漫画头像网站曼联目前积分榜
  • 中小学网站建设白度
  • 上海seo网络推广渠道重庆百度推广seo
  • 怎么封锁网站广州新闻24小时爆料热线
  • 蓟州农家院如何做网站网站建设是什么工作
  • 甘肃网站设计公司排名优化课程
  • 有什么网站专门做美食的吗搜索引擎优化英文简称为
  • 有哪些做画册的网站1688如何搜索关键词排名
  • 国内做企业英文网站用什么cms山西网络营销seo
  • 全面的锦州网站建设企业培训机构有哪些
  • 一个单位网站被黑该怎么做台州网站建设方案推广
  • 宣传单网站设计培训班学费一般多少