
JDK源码系列
文章平均质量分 85
zhen_hong
没个性,不签名
展开
-
19、ThreadLocal
一、简介ThreadLocal可用于解决多线程并发的问题,其原理是每个线程都有一个代表其自身的Thread对象,每个Thread对象内部都有一个ThreadLocalMap字段,这个ThreadLocalMap是用于保存数据的容器。另一方面ThreadLocal也可以解决跨层跨方法传通用值的问题。二、字段说明//这个值等于下面两个字段相加的结果 nextHashCode.getAndAdd...原创 2020-04-06 12:25:17 · 264 阅读 · 1 评论 -
18、Phaser
一、Phaser1.1 字段说明//用于记录parties,phase//高32用于记录当前正在等待释放线程执行的阶段//低32的高16位表示每一阶段可arrived的parties数量//低32的低16位表示当前还剩多少parties未arrivedprivate volatile long state;//表示最大可arrived的parties数private stati...原创 2020-04-01 18:41:51 · 175 阅读 · 0 评论 -
17、ForkJoinPool之工作线程的启动与任务的fork以及join
一、工作线程的启动ForkJoinPool创建的工作线程类型为ForkJoinWorkerThread,下面是它的run方法1.1 启动扫描任务public void run() { if (workQueue.array == null) { // only run once Throwable exception = null; try { ...原创 2019-12-04 21:57:34 · 1443 阅读 · 0 评论 -
16、ForkJoinPool之外部任务的提交与创建工作线程
一、前言在第15节中我们讲解了ForkJoinPool的实现原理和与之相关的类,为我们学习ForkJoinPool的实现打下了基础。二、原理实现2.1 ForkJoinPool字段说明//低16位掩码,这也是WorkQueue在工作队列组中的最大索引值static final int SMASK = 0xffff; // short bits == max ...原创 2019-12-04 21:53:53 · 891 阅读 · 0 评论 -
15、ForkJoinPool之基础篇
一、基础1.1 原理1.1.1 ForkJoinPool工作队列原理在分析ForkJoinPool之前,我们先来说说它的实现原理下面是ForkJoinPool工作队列组的示意图重点说明:工作队列组的容量为2次幂的值,索引为偶数的,用于存放外部线程提交过来的任务,索引下标为奇数的,存放的是ForkJoinPool内部创建的线程fork出来的任务,工作队列组是一个数组,其元素的类型为...原创 2019-12-04 21:50:21 · 839 阅读 · 0 评论 -
14、ScheduledThreadPoolExecutor
一、前言ScheduledThreadPoolExecutor是基于ThreadPoolExecutor实现的,在学习ScheduledThreadPoolExecutor时,请先移步到第11节学习ThreadPoolExecutor相关的知识二、基础2.1 类图ThreadPoolExecutor:线程池实现,关于ThreadPoolExecutor的内容,请移步到第11节2.1.1...原创 2019-11-24 11:50:00 · 422 阅读 · 0 评论 -
13、DelayQueue
一、类图Iterable:可迭代的,声明实现此接口的类具有迭代元素的能力,在JDK8之后增加了默认方法forEach与spliterator,forEach用于遍历元素,spliterator用于分割迭代器,通常 用于并行流Collection:定义一些集合操作的基本方法,比如add元素,删除元素,包含,交集等等,还有JDK8的流AbstractCollection:模板类,实现了基本的...原创 2019-11-23 22:55:19 · 261 阅读 · 0 评论 -
12、PriorityQueue
一、基础1.1 类图Iterable:可迭代的,声明实现此接口的类具有迭代元素的能力,在JDK8之后增加了默认方法forEach与spliterator,forEach用于遍历元素,spliterator用于分割迭代器,通常用于并行流Collection:定义一些集合操作的基本方法,比如add元素,删除元素,包含,交集等等,还有JDK8的流AbstractCollection:模板类...原创 2019-11-23 20:41:42 · 215 阅读 · 0 评论 -
11、ThreadPoolExecutor
一、基础1.1 类图1.1.1 Executorpublic interface Executor { //提交一个实现了Runnable的任务,异步执行 void execute(Runnable command);}1.1.2 ExecutorService以下对于方法的描述全是基于ThreadPoolExecutor的实现说明的,因为不同的实现可能产生不同的...原创 2019-11-17 21:30:00 · 259 阅读 · 0 评论 -
10、SynchronousQueue
一、类图SynchronousQueue从字面意思上来将就是一个同步队列,啥是同步队列?你只要往同步队里中添加元素,你的线程就会被阻塞,直到另外一个线程去获取对应的元素并唤醒这个线程。根据获取元素的顺序,同步队列也分为公平与不公平的,公平的使用FIFO队列实现,对应的内部类为TransferQueue,不公平由栈实现,对应的内部类为TransferStack以下为SynchronousQu...原创 2019-11-15 16:14:56 · 158 阅读 · 0 评论 -
9、CountDownLatch
一、类图从类图中可以看到CountDownLatch有一个内部类Sync,那么可以肯定CountDownLatch是基于AQS来实现的以下为CountDownLatch的构造函数public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0")...原创 2019-11-09 22:09:48 · 116 阅读 · 0 评论 -
8、CyclicBarrier
一、类图1.1 CyclicBarrier类基础//珊栏public class CyclicBarrier { //内部类,表示代,每次珊栏内线程容量达到指定容量后会进行换代,就简单理解为改朝换代吧 private static class Generation { //表示珊栏是否被破坏,比如抛出错误啥的 boolean bro...原创 2019-11-09 21:14:32 · 139 阅读 · 0 评论 -
7、Semaphore
一、类图很简单,内部持有实现了AbstractQueuedSynchronizer的Sync,Sync为Semaphore的内部类,它没有什么特殊的成员变量,实现了基本的获取许可与释放的逻辑二、许可的获取与释放2.1 获取许可//非公平锁final int java.util.concurrent.Semaphore.Sync#nonfairTryAcquireShared(int a...原创 2019-11-09 19:35:57 · 122 阅读 · 0 评论 -
6、JDK并发锁之读写锁
一、前言 前一节我们分析了AQS并发框架和独占锁以及condition的实现,为我们继续往下分析并发包中其他的类打下了基础,现在我们趁热打铁,分析一下读写锁。二、基础2.1 类图ReadWriteLock:定义了两个接口方法,获取读锁和写锁Sync:ReentrantReadWriteLock的内部类,实现了AQS框架的基本方法,定义了一...原创 2019-11-09 11:50:27 · 328 阅读 · 0 评论 -
5、JDK并发锁之AQS与独占锁
一、AbstractQueuedSynchronizer基础1.1 父类AbstractOwnableSynchronizer/* * @since 1.6 * @author Doug Lea */public abstract class AbstractOwnableSynchronizer implements java.io.Serializable { ...原创 2019-11-08 10:46:34 · 191 阅读 · 0 评论 -
4、ArrayList
一、简介ArrayList顾名思义,数组列表,它是由数组实现的一个List,下面是它的一些成员变量//默认的初始化容量private static final int DEFAULT_CAPACITY = 10;//空数组,当用户指定容量为零时使用private static final Object[] EMPTY_ELEMENTDATA = {};//默认容量大小的空数组,当...原创 2019-11-02 15:20:28 · 116 阅读 · 0 评论 -
3、HashMap
一、HashMap基础1.1 简介Map:定义基本的增删除改查操作AbstractMap:模板方法,实现了一些基本方法HashMap是使用数组+链表+红黑树的方式构成的,它与ConcurrentHashMap的主要区别就是一个是线程不安全,一个是线程安全,在代码上可能会有些差别,但是在计算容量,定位索引等原理上是基本差不多的,想要更多的了解ConcurrentHashMap,请转移...原创 2019-10-31 23:56:07 · 130 阅读 · 0 评论 -
2、TreeMap
一、简介 TreeMap是一个有序的Map,它直接由红黑树构成,所以学习TreeMap只要学会红黑树就可以了,下面是TreeMap的类图Map:定义基本的增删除改查操作AbstractMap:模板方法,实现了一些基本方法SortedMap:从名字上来看就知道这是一个有序的map,它所定义的接口方法要求有序NavigableMap:可导航...原创 2019-10-29 01:06:24 · 289 阅读 · 0 评论 -
1、ConcurrentHashMap
一、ConcurrentHashMap ConcurrentHashMap是HashMap的线程安全版,下面为了描述方便将ConcurrentHashMap简称为hashmap1.1 类图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRrrvO0D-1571846844806)(DC08A8F9D01141848...原创 2019-10-24 00:08:16 · 360 阅读 · 0 评论