- 博客(7)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 红黑树插入、删除结构调整(附JDK10 TreeMap源码注释)
红黑树的5个特性 1、 每个节点要么是红色,要么是黑色; 2、 根节点为黑色; 3、 所有叶节点(NIL节点)都是黑色; 4、 每个红色节点的子节点一定是黑色; 5、 从任一节点到其子树中的每个叶子节点的路径都包含相同数量的黑色节点。 红黑树插入/删除分为两步:第一步,像二叉排序树的插入/删除一样进行查找、插入/删除;第二步,通过重新着色和旋转调整结构使整个树满足红黑树的状态 插入节点 为了使插入...
2019-08-08 15:37:07
155
原创 Java锁升级、偏向锁、轻量级锁
偏向锁 当锁对象第一次被线程获取时,虚拟机会把对象头的锁状态标志设置为01(即偏向状态),同时,使用CAS操作把获取到这个锁的线程的ID记录在对象头的mark word中。如果这个CAS操作成功,那么,以后持有这个偏向锁的线程在进入这个锁相关的同步块的时候都不需要进行同步,只需要测试对象头的mark word中是否存储着当前线程的ID。若测试成功,则直接进入同步块。若测试失败,则需要测试mark ...
2019-06-13 19:37:17
198
原创 AQS笔记之Condition
Condition接口的一个实现类ConditionObject是AQS的内部类,每个Condition对象都包含一个队列,这个队列是Condition对象实现等待/通知的关键。 与Object的监视器模型(synchronized)中一个对象拥有一个同步队列和等待队列不同的是,J.U.C中AQS拥有一个同步队列和多个等待队列。 await方法 public final void await()...
2019-05-26 23:44:44
968
原创 AQS笔记之共享式获取同步状态
acquireShared方法 public final void acquireShared(int arg) { //tryAcquireShared尝试获取共享式同步状态(需重写) // 负数:表示获取失败 // 零值:表示当前结点获取成功, 但是后继结点不能再获取了 // 正数:表示当前结点获取成功, 并且后继结点同样可以获取...
2019-05-24 21:46:06
407
原创 AQS笔记之独占式获取同步状态
跟着函数调用轨迹走一遍。 acquire方法 public final void acquire(int arg) { if (!tryAcquire(arg) &&//尝试获取同步状态(需重写) acquireQueued(addWaiter(Node.EXCLUSIVE), arg))//获取同步状态失败时执行 ...
2019-05-24 16:14:53
387
原创 AQS笔记之前提知识
AQS(队列同步器)是用来构建锁或其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,并通过内置的FIFO 队列来完成资源获取线程的排队工作。 前提 AQS设计基于模板方法模式,即使用者仅需继承同步器并重写指定方法,再调用同步器提供的模板方法(模板方法会调用使用者重写的方法),即可实现自定义同步组件。 重写AQS指定方法,需使用AQS提供的以下3个方法访问或修改同步状态: ge...
2019-05-24 14:11:55
150
原创 关于ReentrantLock中公平锁与非公平锁的一点理解
公平锁 公平锁的主要函数调用轨迹: ReentrantLock类:lock() ReentrantLock类的静态内部类Sync(继承自AbstractQueuedSynchronizer类):acquire(int arg) FairSync类:tryAcquire(int acquires) 非公平锁 公平锁的主要函数调用轨迹: ReentrantLock类:l...
2019-04-11 22:51:15
389
车辆尾灯设计
2015-07-17
Java中final域的内存语义问题
2019-04-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人