jdk源码
文章平均质量分 88
lf19960114
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock源码分析
一.ReentrantReadWriteLock基本原理分析像ReentrantLock实现的是一个排他锁,即若有一个线程获取锁,其他线程都不能再次获取。而ReentrantReadWriteLock提供了一种共享锁策略,即如果有线程获取的是共享锁,则其他线程可以继续获取共享锁,但不能获取排他锁;而如果当前线程获取了排他锁,则其他线程共享锁和排他锁都不能获取。基于ReentrantReadWriteLock内部实现了一对读写锁,一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于写的。在读多于原创 2021-06-11 23:57:17 · 85 阅读 · 0 评论 -
Condition相关源码分析
Condition接口定义Condition将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。可以通过await(),signal()来休眠/唤醒线程。Object的监视器方法和Condition接口的特性对比如下publi原创 2021-06-08 23:51:26 · 73 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock源码实现分析整理重入锁ReentrantLock实现了Lock接口,即实现了加解锁操作的基本API,在此基础上,ReentrantLock提供以下特性:1.支持同一线程对资源的重复加锁,即同一线程重复调用lock方法不会堵塞,但后续解锁次数需要和加锁次数同步,才能真正意义地释放锁。2.支持获取锁时的公平和非公平性选择,类的内部结构:在ReentrantLock,有3个非常核心的内部类:Sync,FairSync,NonfairSync,其中Sync继承自Abstract原创 2021-06-07 23:13:25 · 57 阅读 · 0 评论 -
AQS源码解析
AQS源码解析AQS(AbstractQueuedSynchronizer)队列同步器是用来构建锁和其他同步组件的基础框架,基于cas无锁实现高效的同步机制,它底层维护了一个volatile整型变量和一个先进先出的线程等待队列。它提供独占和共享(多线程进入临界区)的两种资源共享方式,支持中断,超时和适应性自旋。AQS实现原理实现锁有Lock接口及其实现和AQS两大核心部分:1.Lock接口定义了使用者和锁交互的细节,隐藏了实现细节2.AQS则简化了锁的实现方式,封装屏蔽了同步状态管理,线程排队、等原创 2021-06-07 00:05:49 · 81 阅读 · 1 评论 -
ConcurrentHashMap源码解析
一.ConcurrentHashMap数据结构1.JDK1.7数据结构JDK1.7中的HashMap的结构,ConcurrentHashMap将数组每个元素作为一个segment–片段。结构:ReentrantLock+Segment+HashEntry1.get操作,没有使用锁,而是通过Unsafe对象的getObjectVolatile()方法提供的原子读语义,来获得Segment以及对应的链表,然后对链表遍历判断是否存在key相同的节点以及获得该节点的value。但由于遍历过程中其他线程可能原创 2021-06-05 23:35:20 · 101 阅读 · 2 评论 -
JDK1.8 hashmap源码解析
一.HashMap的数据结构jdk1.8版本是数组+ 链表/红黑树二.元素属性public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {// 序列号private static final long serialVersionUID = 362498820763181265L; // 默认的初始容量是16static原创 2021-06-04 23:08:27 · 87 阅读 · 0 评论