All Tags

Tagged with: "并发编程"

18 posts

June 11, 2021
2 min read

CopyOnWriteArraySet 源码分析

JDK源码分析 CopyOnWriteArraySet,CopyOnWriteArraySet是一个基于CopyOnWriteArrayList实现的线程安全的Set集合,所以该Set和CopyOnWriteArrayList拥有完全相似的特性。

June 9, 2021
5 min read

源码分析:线程安全的列表—CopyOnWriteArrayList

JDK源码分析 CopyOnWriteArrayList,CopyOnWriteArrayList 是一个线程安全的ArrayList,但是它的每次操作(add ,set,remove等)都是通过复制一个底层的数组副本来实现的,在写操作的时候都会加上锁,有读写分离的意思。

June 8, 2021
12 min read

源码分析:ConcurrentHashMap—JDK1.8版本

JDK源码分析 ConcurrentHashMap,ConcurrentHashMap—JDK1.8版本,JDK1.8版本的ConcurrentHashMap采用了和HashMap类似的实现机制:数组+链表+红黑树,通过自旋+synchronized锁+CAS+volatile的方式来实现保证数据的一致性。

June 6, 2021
6 min read

源码分析:ConcurrentHashMap—JDK1.7版本

JDK源码分析 ConcurrentHashMap,ConcurrentHashMap—JDK1.7版本,ConcurrentHashMap是从JDK 1.5开始支持一定并发性的哈希表,其中所有的操作都是线程安全的,所以常常会被应用于高并发的场景中。

February 4, 2021
8 min read

源码分析:Phaser 之更灵活的同步屏障

JDK源码分析 Phaser,Phaser 是 JDK 1.7 开始提供的一个可重复使用的同步屏障,功能类似于 CyclicBarrier 和 CountDownLatch,但使用更灵活,支持对任务的动态调整,并支持分层结构来达到更高的吞吐量。

January 29, 2021
3 min read

源码分析:CyclicBarrier 之循环栅栏

JDK源码分析 CyclicBarrier,CyclicBarrier 是一个同步辅助工具,允许一组线程全部等待彼此达到共同屏障点,且等待的线程被释放后还可以重新使用,所以叫做Cyclic(循环的)。

November 23, 2020
4 min read

AbstractQueuedSynchronizer(AQS) 总结篇

AQS 全称是AbstractQueuedSynchronizer,在java.util.concurrent.locks包下面,是一个抽象的可以实现阻塞线程、排队控制、唤醒线程等操作的同步器基础框架类,AQS 可以实现排它锁、共享锁、条件锁、计数器等相关功能。

November 22, 2020
3 min read

源码分析:CountDownLatch 之倒计时门栓

JDK源码分析 CountDownLatch,CountDownLatch 是JDK1.5 开始提供的一种同步辅助工具,它允许一个或多个线程一直等待,直到其他线程执行的操作完成为止。在初始化的时候给定 CountDownLatch 一个计数,调用await() 方法的线程会一直等待,其他线程执行完操作后调用countDown(),当计数减到0 ,调用await() 方法的线程被唤醒继续执行。

November 21, 2020
3 min read

源码分析:Semaphore之信号量

JDK源码分析 Semaphore,Semaphore 又名计数信号量,从概念上来讲,信号量初始并维护一定数量的许可证,使用之前先要先获得一个许可,用完之后再释放一个许可。信号量通常用于限制线程的数量来控制访问某些资源,从而达到单机限流的目的,比如SpringCloud 中的Zuul 组件用的是 Hystrix 的信号量(semaphore)隔离模式。

November 19, 2020
13 min read

源码分析:StampedLock之升级版的读写锁

JDK StampedLock 源码分析,StampedLock 是JDK1.8 开始提供的一种锁, 是对之前介绍的读写锁 ReentrantReadWriteLock 的功能增强。StampedLock 有三种模式:Writing(写)、Reading(读)、Optimistic Reading(乐观度),StampedLock 的功能不是基于AQS来实现的,而是完全自己内部实现的功能,不支持重入。在加锁的时候会返回一个戳,解锁的时候需要传入,匹配完成解锁操作。

November 13, 2020
7 min read

源码分析:ReentrantReadWriteLock之读写锁

JDK源码分析 ReentrantReadWriteLock,从字面意思可以看出,是和重入、读写有关系的锁,实际上 ReentrantReadWriteLock 确实也是支持可重入的读写锁,并且支持公平和非公平获取锁两种模式。

November 10, 2020
3 min read

源码分析:②ReentrantLock之条件锁Condition

JDK源码分析 ReentrantLock Condition,条件锁,指在获得锁之后,还需要达成某些条件后,才能继续执行的锁。且必须配合Lock一起使用,也就是说必须获得锁之后才可以调用condition.await()方法

November 1, 2020
6 min read

源码分析:AbstractQueuedSynchronizer(AQS)—强大的同步基础框架

JDK源码分析 AbstractQueuedSynchronizer,AbstractQueuedSynchronizer(AQS) 位于java.util.concurrent.locks包下面,AQS 提供了一个基于FIFO的队列和维护了一个状态state变量赖表示状态,可以作为构建锁或者其他相关同步装置的基础框架。AQS 支持两种模式:共享模式 和 排他模式。