源码
文章平均质量分 86
小望没烦恼
这个作者很懒,什么都没留下…
展开
-
ArrayBlockingQueue源码(JDK1.8)
文章目录成员变量构造函数入队方法出队方法总结在手写线程池的时候,发现BlockingQueue非常重要,遂查看了BlockingQueue的源码,记录在此。Java.util.concurrent.BlockingQueue接口有以下阻塞队列的实现,基于ReentrantLock:FIFO队列:LinkedBlockingQueue、ArrayBlockingQueue(固定长度)优先级队列:PriorityBlockingQueue(看到优先级就应该想到大小堆)提供了阻塞的take()和原创 2022-04-10 16:12:23 · 584 阅读 · 0 评论 -
AQS源码阅读(JDK1.8)
一、简介AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,是Java中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。这是因为AQS是被设计来支持多种用途的,如果定义抽象方法,则子类在继承时必须要覆写所有的抽象方法,这显然是不合理的。所以AQS将一些需要子类覆写的方法都设计成protect方法,将其默认实现为抛出UnsupportedOpera原创 2021-04-26 14:40:13 · 389 阅读 · 0 评论 -
ThreadLocal源码阅读(JDK1.8)
一、简介ThreadLocal 提供了线程间数据隔离的功能,从它的命名上也能知道这是属于一个线程的本地变量。也就是说,每个线程都会在 ThreadLocal 中保存一份该线程独有的数据,所以它是线程安全的。ThreadLocal的作用域就是线程。一个简单的例子展示ThreadLocal的特性public class ThreadLocalTest { public static void main(String[] args) { ThreadLocal<String&g原创 2021-04-21 19:15:44 · 187 阅读 · 0 评论 -
ConcurrentHashMap原理解析
一、必备知识JDK1.7 ConcurrentHashMap使用锁分段技术,由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元原创 2021-04-17 15:54:53 · 393 阅读 · 0 评论 -
HashMap源码阅读(JDK1.8)
必备知识:HashMap 的底层是数组+链表+红黑树,它是线程不安全的,允许key为null,value为null。遍历时无序。其底层数据结构的数组称之为哈希桶,每个桶里面放的是链表,链表中的每个节点,就是哈希表中的每个元素。在JDK8中,当链表长度达到8,并且数组长度达到64,会转化成红黑树,以提升它的查询、插入效率,它实现了Map<K,V>, Cloneable, Serializable接口。当HashMap的容量达到threshold阈值时,就会触发扩容。扩容前后,哈希桶的长度一原创 2021-04-16 18:10:20 · 135 阅读 · 0 评论 -
Debug演示ArrayList扩容机制
Debug演示ArrayList扩容机制先解释一下IDEA中Dedug模式下的几个按钮。Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。Step Out (Shift + F8):步出,从步入的方原创 2021-04-15 15:44:49 · 344 阅读 · 0 评论 -
ArrayList源码阅读(JDK1.8)
ArrayList源码阅读(JDK1.8)一、ArrayList结构public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.SerializableArrayList 实现了RandmoAccess接口,即提供了随机访问功能。在ArrayList中,我们即可以通过元素的序号快速获取元素对象,这就是快原创 2021-04-14 15:08:44 · 121 阅读 · 0 评论