![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK8 JUC 源码全解
文章平均质量分 72
JAVA 并发包 java.util.concurrent 源码全面解析。基于 JDK8。
秀强
物有本末,事有终始。
展开
-
【JUC源码专题】AQS 核心源码分析(JDK8)
AQS 源码分析原创 2022-11-19 21:41:19 · 838 阅读 · 0 评论 -
【正本清源】Synchronized 源码全解之偏向锁的获取(基于 Openjdk12)
基于openjdk12的Synchronized锁升级过程之偏向锁的获取。原创 2023-01-29 15:20:20 · 553 阅读 · 0 评论 -
【JUC源码专题】CyclicBarrier 核心源码分析(JDK8)
循环的屏障,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier 可以被重用。CountDownLatch 可以实现类似的功能,但是 CountDownLatch 不可重复使用。原创 2020-03-05 21:49:51 · 150 阅读 · 0 评论 -
【JUC源码专题】ArrayBlockingQueue 源码分析(JDK8)
ArrayBlockingQueue 通过一个全局锁和两个条件变量实现了一个标准的生产者消费者模型。原创 2022-09-20 11:33:44 · 141 阅读 · 0 评论 -
【JUC源码专题】LinkedBlockingQueue 源码分析(JDK8)
LinkedBlockingQueue 不同于 ArrayBlockingQueue,前者通过使用 Atomicinteger 类型的 count 变量和链表中哨兵结点(头结点 head)将锁拆分为 take 和 put 两把锁使锁细粒度化了,在多线程竞争方面性能优于后者。后者由于是连续的地址空间,所以适合用在需要利用高速缓存的场景。原创 2022-09-21 11:07:40 · 426 阅读 · 0 评论 -
【JUC源码专题】LinkedBlockingDeque 源码分析(JDK8)
LinkedBlockingDeque 是基于链表实现的双端阻塞队列,我们可以从队列的头部和尾部插入或者读取元素。原创 2022-09-21 18:49:56 · 417 阅读 · 0 评论 -
【JUC源码专题】Striped64 核心源码分析(JDK8)
一言以蔽之:合理分散线程竞争。将对 base 的 cas 分散到 base 和 cells 数组中。Striped64 的核心是通过分治思想将对 base 的竞争分散到不同的 cell 单元中。使用 @Contended 注解来支持缓存行填充,避免 value 的缓存行伪共享。原创 2022-11-23 20:12:38 · 451 阅读 · 0 评论 -
【JUC源码专题】CountDownLatch 核心源码分析(JDK8)
倒数闭锁,用于协调一组线程的工作。CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。注:CountDownLatch 不能被重复使用(state 减到 0 以后就唤醒全部等待线程)。[[01 JDK8/JUC/CyclicBarrier|CyclicBarrier]] 可以重复使用。两者可以对比学习。原创 2020-03-05 20:13:14 · 175 阅读 · 0 评论 -
【JUC源码专题】Semaphore 核心源码分析(JDK8)
当结点状态为 -1 时,就算没有多余的信号量,也会唤醒后继结点。后继结点自行判断是否需要继续阻塞。原创 2020-03-05 22:57:11 · 143 阅读 · 0 评论 -
【JUC源码专题】ReentrantLock 核心源码分析(JDK8)
判断当前是否有线程持有锁若有,判断是否是当前线程,若是当前线程则重入。重入次数超过上限(int 最大值)则抛异常。若不是当前线程持有锁,则将当前线程封装成 Node 进入队列排队。若没有线程持有锁,则判断队列中是否有其他线程正在排队。若没有线程排队或者当前线程排在第一个,则基于CAS的方式将 state 修改为1。若修改成功则表示获取锁成功,将当前线程设置到 exclusiveOwnerThread,代表是当前线程持有锁资源。设置中断标记位selfInterrupt()。原创 2022-08-29 22:13:47 · 404 阅读 · 0 评论 -
【JUC源码专题】ReentrantReadWriteLock 核心源码分析(JDK8)
Sync 类继承了 AQS,这也是个[[模版方法模式]],实现了公平锁和非公平锁公共的方法,同时定义了一些抽象方法,让 FairSync 和 NonfairSync 子类分别去实现,比如。acquire 方法依赖于 tryAcquire 方法的返回值,tryAcquire 方法的具体逻辑由 AQS 子类实现。ReadLock 的 lock 方法调用了 AQS 的 acquireShared 方法。WriteLock 的 lock 方法调用了 AQS 的 acquire 方法。,低 16 位用于表示。原创 2022-11-20 17:59:39 · 311 阅读 · 0 评论