文章列表 | 月光中的污点

文章列表

标签: 源码讲解

当前位置: 首页 / 标签 / 源码讲解

CountDownLatch 源码详解

本篇的介绍对象是 CountDownLatch,它同样是基于 AQS 之上扩展的一款多线程场景下的工具类,它可以使一个或多个线程等待其他线程各自执行完毕后再执行。 对于 CountDownLatch 理解,我们可以将单次拆开为 CountDown 和 Latch。CountDown 表示倒计时,Latch 表示门闩,当倒计时结束后门闩解除,门就开了。 要完成一项复杂的任务,任务被划分为子任务1和子任务2,3,4...,为了提高执行任务的效率,采用多线程去完成。

Semaphore 源码详解

在高并发访问的场景下,为了保证项目不被大流量请求的压力影响性能导致项目运行崩溃,常用的解决方案就是限流和服务降级。 本篇介绍 Semaphore, 直译就是信号量,是基于 AQS 扩展的一种多线程并发控制的工具,也就是我们常说的限流工具之一。 Semaphore 通过 permit 来判断线程是否可通行。

AQS 源码详解

AQS 是抽象的队列同步器,是用来构建锁或其他同步组件的重量级基础框架及整个 JUC 体系的基石。 下边的组件都是基于 AQS 框架扩展实现的: 虽然这些组件在多线程场景下有不同的作用,但代码中也有相似之处,如都需要管理锁状态,维护阻塞线程,维护唤醒线程。而 AQS 的作用就是将这些相似的、公共的代码封装在一起。

CAS 原理新讲

CAS 全程 Compare-And-Swap,它的功能是判断内存中某个位置的值是否为预期值,如果是则更改为新值,这个过程是原子性的。 CAS 是另一个无锁解决方案,更准确的是采用乐观锁技术,实现线程安全的问题。 在设计思想上,CAS 的执行有三个操作数,V-内存值,A-期望值,B-修改成的目标值。当且仅当 V 的值等于 A 时, CAS 通过原子方式用新值 B 来更新 V 的值,否则不会执行任何操作。