
JDK 系列 -- 并发
JDK 并发相关源码分析专栏
奋斗企鹅CopperSun
这个作者很懒,什么都没留下…
展开
-
【JDK源码分析系列】Lock 源码分析
【JDK源码分析系列】Lock 源码分析【1】Lock 源码注解package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;/** * {@code Lock} implementations provide more extensive locking * operations than ca...原创 2019-08-07 19:25:13 · 366 阅读 · 0 评论 -
【JDK源码分析系列】ReentrantLock 源码分析
【JDK源码分析系列】ReentrantLock 源码分析【1】内部同步类 --Sync /** * 内部类变量 * ReentrantLock 可重入锁的实现实际上是基于内部类 Sync 实现的; */ private final Sync sync; /** * Sync 类继承 AbstractQueuedSyn...原创 2019-08-17 16:09:32 · 274 阅读 · 0 评论 -
【JDK源码分析系列】ReentrantReadWriteLock 源码分析
【JDK源码分析系列】ReentrantReadWriteLock 源码分析【1】ReentrantReadWriteLock 类中相关常量 /** * 读写状态 * 即同步器的同步状态 * 读写锁使用 "按位切割使用" 变量的方式,将变量分为两个部分: * 高 16位(标识读状态)以及低 16位(标识...原创 2019-08-18 13:12:13 · 297 阅读 · 0 评论 -
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析 -- 基本属性
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析【1】AbstractQueuedSynchronizer 整体架构【2】AbstractQueuedSynchronizer 基本属性【2.0】AbstractQueuedSynchronizer 的定义与说明// 1. 提供了一种框架,自定义了先进先出的同步队列,让获取不到锁的线程能进入同步队列中排队;// 2. 同步器有个状态字段,可以通过状态字段来判断能否得到锁,此时设计的关键在于依赖安全的.原创 2020-06-18 16:49:45 · 246 阅读 · 0 评论 -
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析 -- 锁的获取与释放
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析【1】AbstractQueuedSynchronizer 内部类 Node 类源码分析 /** * 静态内部类 * Node 类标识同步队列中的一个节点 * * 用于保存获取同步状态失败的线程引用、等待状态以及前驱与后继节点; */...原创 2019-08-17 00:12:02 · 349 阅读 · 0 评论 -
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析 -- 条件队列的重要方法
【JDK源码分析系列】AbstractQueuedSynchronizer 源码分析 -- 条件队列的重要方法【1】AbstractQueuedSynchronizer 整体架构1. AQS 中队列只有两个 : 同步队列 + 条件队列,底层数据结构两者都是链表;2. 图中有四种颜色的线代表四种不同的场景,1、2、3 序号代表看的顺序【2】条件队列的必要性主要是因为并不是所有场景一个同步队列就可以搞定的,在遇到锁 + 队列结合的场景时,就需要 Lock + Condition 配合才行,原创 2020-06-18 18:34:34 · 279 阅读 · 0 评论 -
【JDK源码分析系列】FutureTask 源码解析
【JDK源码分析系列】FutureTask 源码解析【1】Runnable// Runnable : 无返回值新建任务的方式@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thre转载 2020-06-19 14:52:01 · 223 阅读 · 0 评论 -
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- ThreadPoolExecutor 的类结构
【JDK源码分析系列】ThreadPoolExecutor 源码解析【1】线程池整体执行流程图示线程池相关详细介绍参见【JAVA并发编程系列】并发框架 -- Executor 框架(线程池)【2】ThreadPoolExecutor 的类结构【2.1】Executor// Executor:定义 execute 方法来执行任务,入参是 Runnable,无出参public interface Executor { void execute(Runnable com..转载 2020-06-19 17:57:55 · 256 阅读 · 0 评论 -
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 基本属性分析
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 基本属性分析【1】ThreadPoolExecutor 的基本属性 -- 常量与变量//ctl 线程池状态控制字段,由两部分组成://1:workerCount 有效的线程数,workerCount 最大是到(2^29)-1,大概 5 亿个线程//2:runState 线程池的状态,提供了生命周期的控制,源码中有很多关于状态的校验,状态枚举如下://RUNNING(-536870912):接受新任务或者处理队列里的转载 2020-06-22 09:32:41 · 214 阅读 · 0 评论 -
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 任务提交与运行
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 任务提交与运行【1】线程池任务的提交【1.1】AbstractExecutorService -- submitsubmit 方法主要完成的任务1. 把 Runnable 和 Callable 都转化成 FutureTask;2. 使用 execute 方法执行 FutureTask;// submit 方法是使用线程池时提交任务的方法,支持 Runable 和 Callable 两种任务的提交,// 方法中原创 2020-06-22 11:44:57 · 201 阅读 · 0 评论 -
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 线程池终止
【JDK源码分析系列】ThreadPoolExecutor 源码解析 -- 线程池终止【1】线程池终止【1.1】ThreadPoolExecutor --shutdown//shutdown() -- 温柔的终止线程池public void shutdown() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { //判断调用者是否有权限shutdown线程池.原创 2020-06-22 12:21:41 · 294 阅读 · 0 评论 -
【JDK源码分析系列】ScheduledThreadPoolExecutor源码分析
【JDK源码分析系列】ScheduledThreadPoolExecutor源码分析【1】ScheduledThreadPoolExecutor 继承体系图示致谢本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。...原创 2020-09-28 16:12:09 · 262 阅读 · 0 评论 -
【JDK源码分析系列】CountDownLatch
【JDK源码分析系列】CountDownLatch【1】CountDownLatch 源码分析CountDownLatch 是一个辅助同步器类,用来作计数使用,它的作用有点类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件;初始计数值在构造CountDownLatch对象时传入,每调用一次 countDown() 方法,计数值就会减1;线程可以调用CountDownLatch的await方法进入阻塞,当计数值降到0时,所有之前调用await阻塞的线程都会释放;【原创 2020-09-11 09:04:43 · 216 阅读 · 0 评论 -
【JDK源码分析系列】AtomicLong 与 LongAdder 对比分析
【JDK源码分析系列】AtomicLong 与 LongAdder 对比分析【1】LongAdder 性能优势与适用场景 AtomicLong VS LongAdder LongAdder适合的场景是统计求和计数的场景 在竞争激烈的情况下,LongAdder的效率比AtomicLong高,但要消耗更多的空间 LongAdder 性能优势 LongAdder 的基本思路是分散热点, AtomicLong 中存在成员变量 value 保存 long 值,在高并发的情况下该 value 值是原创 2020-09-11 09:05:39 · 301 阅读 · 0 评论