目录 简介 类结构 源码解析 构造方法 add(E e) add(int index, E element) get(int index) remove(int index) 迭代器Iterator遍历 总结 简介   我们都很熟悉容器对象ArrayList,并且在初学时就被告知ArrayList不是线程安全的:当我们在使用迭代器遍历ArrayList时,如果有其他线程修改了ArrayList对象,那么就会抛出ConcurrentModificationException异常.相较于Vector…
java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 java多线程系列(五)之synchronized ReentrantLock volatile Atomic 原理分析 java多线程系列(六)之线程池原理及其使用 java多线程系列(七)---Ca…
CopyOnWriteArrayList  源码分析: 1:成员属性: final transient ReentrantLock lock = new ReentrantLock();  //内部是通过ReentrantLock来保证线程安全的,通过一个非公平锁 private transient volatile Object[] array;  维护一个Object数组 2:构造方法  初始化一个长度为0 的Object数组  new Object[0] public CopyOnWrit…
Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 0x02 Alink支持的评估指标 2.1 轮廓系数(silhouette coefficient): 2.2 Calinski-Harabaz(CH) 2.3 Davies-Bouldin指数(Dbi) 2.4 Rand index(兰德指数)(RI) .Adjusted Rand index(调…
基于jdk1.7源码 一.无锁容器 CopyOnWriteArrayList是JDK5中添加的新的容器,除此之外,还有CopyOnWriteArraySet.ConcurrentHahshMap和ConcurrentLinkedQueue等,它们都是无锁容器. 所谓无锁,就是不需要使用对象内置锁(synchronized)或显示加锁(Lock),而是抛弃锁机制而使用其它一些策略来保证线程安全. 这些无锁容器背后的通用策略是:对容器的修改可以与读取操作同时发生,只要读取者只能看完成修改的结果即可.…
并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝数组(快照)上进行的,也就是写时拷贝策略. 我们首先看一下CopyOnWriteArrayList的类图有哪些属性和方法,如下图所示: 如上,CopyOnWriteArrayList的类图,每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,Reentran…
前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建.任务的添加到线程池的关闭整个流程,让你知其然所以然.希望你可以通过本篇博文知道ThreadPoolExecutor是怎么添加任务.执行任务的,以及延伸的知识点.那么先来看看ThreadPoolExecutor的继承关系吧. 继承关系 Executor接口 public interface Executor { void execute(Runnable command); } Executor接口只有一个方法exec…
0.概述 ThreadLocal,即线程本地变量,是一个以ThreadLocal对象为键.任意对象为值的存储结构.它可以将变量绑定到特定的线程上,使每个线程都拥有改变量的一个拷贝,各线程相同变量间互不影响,是实现共享资源的轻量级同步. 下面是个ThreadLocal使用的实例,两个任务共享同一个变量,并且两个任务都把该变量设置为了线程私有变量,这样,虽然两个任务都”持有“同一变量,但各自持有该变量的拷贝.因此,当一个线程修改该变量时,不会影响另一线程该变量的值. public class Loc…
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离. 继承体系 CopyOnWriteArrayList实现了List, RandomAccess, Cloneable, java.io.Serializable等接口. Copy…
CopyOnWriteArrayList 解决脏读问题:牺牲写的效率,提高读的效率 CopyOnWriteArrayList是一种读写分离的思想体现的ArrayList: 它将读写的操作对象分离开来: 写的过程中,通过复制出一片新的内存,在新的内存中执行完成写操作,再赋值回去,完成写操作: 在写的过程中,可以进行并发的读,因为操作的并不是同一片内存: 这样就避免了java.util.ConcurrentModificationException并发修改异常了: 下面一步步来看一下源码,怎么实现的…