锁
文章平均质量分 61
小鱼大神带我飞
这个作者很懒,什么都没留下…
展开
-
谈谈Synchronized的锁升级机制?
谈谈Synchronized的锁升级机制? 一般来说的流程为 无锁->偏向锁->轻量级锁->重量级锁 偏向锁 在无锁竞争的情况下,为了减少代价,引入偏向锁。 当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,因此以后线程1再次获取锁的时候,需要比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获取锁对象),则无需使用CAS来加锁、解锁; 如果不一致(其他线程,如线程2要竞争锁对原创 2021-08-18 16:43:13 · 177 阅读 · 0 评论 -
ConcurrentHashMap一生之敌
ConcurrentHashMap一生之敌 已经是不得不掌握的一个容器了 1.7 Segment数组,Segment里面包括HashEntry HashEntry组成 是数组加链表 final Segment<K,V>[] segments; transient Set<K> keySet; transient Set<Map.Entry<K,V>> entrySet; Segment组成 static final class Segment<K,原创 2021-08-14 16:59:28 · 111 阅读 · 0 评论 -
CopyOnWirte思想
CopyOnWirte思想 CopyOnWrite指在"写"的时候不直接"写"源数据,而是把数据拷贝一份进行修改,然后再通过悲观锁或者乐观锁的方式写回。 主要就是为了让在“读”的时候不加锁。因为一般来说读写是互斥的,写的过程中我们如果读可能读到脏数据,但是如果我们拷贝一份去修改再写回,那么只有写回的这一步是线程不安全的,因为修改的时候是操作的副本。 那么我们要解决两个问题: 写回的操作要线程安全 写回的操作要happens-before于读的操作 解决写回操作的线程安全 public boolean原创 2021-08-14 10:43:50 · 108 阅读 · 0 评论