源码
文章平均质量分 85
努力学习,努力爱你!
这个作者很懒,什么都没留下…
展开
-
DelayQueue源码分析
leader : 延迟队列的任务只有到期之后才会执行,对于没有到期的任务只有等待,为了确保优先级最高的任务到期后可以即刻被执行,设计者就用 leader 来管理延迟任务,只有 leader 所指向的线程才具备定时等待任务到期执行的权限,而其他那些优先级低的任务只能无限期等待,直到 leader 线程执行完手头的延迟任务后唤醒它。我们这里希望任务可以按照我们预期的时间执行,例如提交 3 个任务,分别要求 1s、2s、3s 后执行,即使是乱序添加,1s 后要求 1s 执行的任务会准时执行。如有问题,欢迎指正!原创 2023-09-14 13:28:57 · 106 阅读 · 0 评论 -
ArrayBlockingQueue源码分析
但也可以指定队列大小,从而成为有界的。在使用notify()/notifyAll()方法进行通知时,被通知的线程是由 JVM 选择的,用ReentrantLock类结合Condition实例可以实现“选择性通知” ,这个功能非常重要,而且是 Condition 接口默认提供的。ArrayBlockingQueue 虽名为阻塞队列,但也支持非阻塞获取和新增元素(例如 poll() 和 offer(E e) 方法),只是队列满时添加元素会抛出异常,队列为空时获取的元素为 null,一般不会使用。原创 2023-09-14 11:40:06 · 51 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析
其中唯一的线程安全 List 实现就是 CopyOnWriteArrayList。原创 2023-09-13 22:45:17 · 118 阅读 · 0 评论 -
LinkedHashMap源码分析
LinkedHashMap 是 Java 集合框架中 HashMap 的一个子类,它继承了 HashMap 的所有属性和方法,并且在 HashMap 的基础重写了 afterNodeRemoval、afterNodeInsertion、afterNodeAccess 方法。使之拥有顺序插入和访问有序的特性。原创 2023-09-12 14:05:56 · 80 阅读 · 0 评论 -
ConcurrentHashMap源码分析
java8 中的 ConcurrentHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由 Java7 中的 Segment 数组 + HashEntry 数组 + 链表 进化成了 Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。Synchronized 锁自从引入锁升级策略后,性能不再是问题。原创 2023-09-12 10:57:16 · 88 阅读 · 0 评论 -
HashMap源码分析
loadFactor 负载因子是控制数组存放数据的疏密程度,loadFactor 越趋近于 1,那么 数组中存放的数据(entry)也就越多,也就越密,也就是会让链表的长度增加,loadFactor 越小,也就是趋近于 0,数组中存放的数据(entry)也就越少,也就越稀疏。threshold = capacity * loadFactor,当 Size>threshold的时候,那么就要考虑对数组的扩增了,也就是说,这个的意思就是 衡量数组是否需要扩增的一个标准。之后每次扩充,容量变为原来的 2 倍。原创 2023-09-11 20:00:51 · 75 阅读 · 0 评论 -
LinkedList 源码分析
E item;// 节点值// 指向的下一个节点(后继节点)// 指向的前一个节点(前驱结点)// 初始化参数顺序分别是:前驱结点、本身节点值、后继节点。原创 2023-09-11 16:31:24 · 510 阅读 · 0 评论 -
ArrayList 源码分析
arraycopy() 需要目标数组,将原数组拷贝到你自己定义的数组里或者原数组,而且可以选择拷贝的起点和长度以及放入新数组中的位置 copyOf() 是系统自动在内部新建一个数组,并返回该数组。以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。即向数组中添加第一个元素时,数组容量扩为 10。length – 要复制的数组元素的数量。newLength – 要返回的副本的长度。srcPos – 源数组中的起始位置。newType – 要返回的副本的类。dest – 目标数组。原创 2023-09-11 15:16:29 · 88 阅读 · 0 评论