陈树义的博客

分享我的所思所想

并发集合源码系列(八):ConcurrentLinkedDeque

在开始讲ConcurrentLinkedDeque之前,我们先来了解下Deque这种数据结构,我们知道Queue是一种具有FIFO特点的数据结构,元素只能在队首进行“入队”操作,在队尾进行“出队”操作。Queue接口定义Queue的接口非常简单,一共只有三种类型的操作:入队、出队、读取。上述方法,可

并发集合源码系列(七):ConcurrentLinkedQueue

ConcurrentLinkedQueue是JDK1.5时随着J.U.C一起引入的一个支持并发环境的队列。从名字就可以看出来,ConcurrentLinkedQueue底层是基于链表实现的。Doug Lea在实现ConcurrentLinkedQueue时,并没有利用锁或底层同步原语,而是完全基于自

并发集合源码系列(六):CopyOnWriteArraySet

CopyOnWriteArraySet,是另一类适合并发环境的SET工具类,也是在JDK1.5时,随着J.U.C包一起引入的。我们之前已经介绍过了ConcurrentSkipListSet,ConcurrentSkipListSet底层基于Skip List(跳表)实现,其操作平均时间复杂度均为O(

并发集合源码系列(五):CopyOnWriteArrayList

ArrayList是一种“列表”数据机构,其底层是通过数组来实现元素的随机访问。JDK1.5之前,如果想要在并发环境下使用“列表”,一般有以下3种方式:使用Vector类使用Collections.synchronizedList返回一个同步代理类;自己实现ArrayList的子类,并进行同步/加锁

并发集合源码系列(四):ConcurrentSkipListSet

ConcurrentSkipListSet,是JDK1.6时J.U.C新增的一个集合工具类,顾名思义,它是一种SET类型。SET类型,在数学上称为“集合”,具有互异性、无序性的特点,也就是说SET中的任意两个元素均不相同(即不包含重复元素),且元素是无序的。是不是感觉和HashMap有点类似?Has

并发集合源码系列(二):ConcurrentHashMap 扩容

通过上一篇文章——ConcurrentHashMap原理(1),相信读者对ConcurrentHashMap的基本原理有了一个初步认识,但是上一篇中还有一个遗留问题没有讨论到,那就是ConcurrentHashMap的扩容和数据迁移。本文中,我们将会对这两个问题进行讨论。扩容思路JDK1.8中,Co

并发集合源码系列(一):ConcurrentHashMap基础

ConcurrentHashMap是在JDK1.5时,J.U.C引入的一个同步集合工具类,顾名思义,这是一个线程安全的HashMap。不同版本的ConcurrentHashMap,内部实现机制千差万别,本节所有的讨论基于JDK1.8。ConcurrentHashMap的类继承关系并不复杂:可以看到C

并发包源码系列(十三):总结

总的来说,并发源码可以总结成下面这张思维导图:关于并发源码解析,可以参考两个系列的文章:Ressmix的并发系列明哥并发系列

并发包源码系列(十二):并发工具类 Exchanger

前面三篇博客分别介绍了CyclicBarrier、CountDownLatch、Semaphore,现在介绍并发工具类中的最后一个Exchange。Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的(反正我是看晕

并发包源码系列(十一):并发工具类 Semaphore

信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。 Semaphore,在API是这么介绍的: 一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个