JAVA并发容器源码分析【一】开篇
准备新写个文集《JAVA并发容器源码分析》,套路还是采用:先翻译源码,再分析技术实现。
写几个常用到的并发容器:ConcurrentHashMap、CopyOnWriteArrayList、LinkedBlockingQueue。
并发容器:
是专门针对多线程并发设计的,使用了锁分段技术,只对操作的位置进行同步操作,
但是其他没有操作的位置其他线程仍然可以访问,提高了程序的吞吐量。
采用了CAS算法、部分代码使用synchronized锁保证线程安全。
ConcurrentHashMap
JDK6与JDK7中采用一种更加细粒度的加锁机制Segment“分段锁”,JDK8中采用CAS无锁算法。
CopyOnWriteArrayList
对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用,
并通过volatile 保证其可见性,写操作的锁采用:ReentrantLock。
LinkedBlockingQueue
通过ReentrantLock实现线程安全,通过Condition实现阻塞和唤醒,基于链表实现的可阻塞的FIFO队列。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!