并发编程
文章平均质量分 96
BoscoKuo
言念君子,温其如玉。
展开
-
AQS实践(一):ReentrantLock概述
1 ReentrantLock类图结构ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取到该锁,其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。上图是ReentrantLock类图结构,通过类图可以对ReentrantLock内部有个大致的了解。ReentrantLock是使用AQS来实现的,并且根据参数来决定内部是一个公平锁还是非公平锁。// 默认是非公...原创 2019-11-29 17:11:43 · 254 阅读 · 0 评论 -
Java并发编程:AQS概述
1 AQS 锁的底层支持AQS的全称是AbstractQueuedSynchronizer,抽象同步队列。ReentrantLock底层使用了AQS(内部静态类Sync实现了AQS),ThreadPoolExecutor底层也是用了AQS(内部类Worker实现了AQS)。上类图可以看处,AQS是一个FIFO的双向队列,其内部通过结点head和tail记录队首和队尾元素。1.1 内部静态类N...原创 2019-11-27 18:16:39 · 644 阅读 · 0 评论 -
Java并发编程:ScheduledThreadPoolExecutor源码解析
1 ScheduledThreadPoolExecutor类图ScheduledThreadPoolExecutor继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。线程池队列是DelayedWorkQueue,是一个延迟队列。ScheduledFutureTask是具有返回值的任务,继承自FutureTask。FutureTask的内部有...原创 2019-11-14 14:48:47 · 255 阅读 · 0 评论 -
Java并发编程:ThreadPoolExecutor源码解析
1 介绍线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。二是线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态增加线程数。2 ThreadPoolExecutor类图高清图请点击Integer类型用32位二进制表示,其中高三位表示线程池状态,后面29位用来记录线程池线程个数。 // 默认是Running状态,线程个数为0 private f...原创 2019-09-29 08:30:11 · 233 阅读 · 0 评论