摘要: 1.简介 线程池可以简单看做是一组线程的集合,通过使用线程池,我们可以方便的复用线程,避免了频繁创建和销毁线程所带来的开销。在应用上,线程池可应用在后端相关服务中。比如 Web 服务器,数据库服务器等。以 Web 服务器为例,假如 Web 服务器会收到大量短时的 HTTP 请求,如果此时我们简单的为 阅读全文
posted @ 2020-03-18 21:18 windy杨树 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 目录 1 简介 2 背景介绍 1.简介 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 – 内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不 阅读全文
posted @ 2020-03-18 21:14 windy杨树 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 1 概述 Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java的语言规范。它和HashMap很像,同属于散列表,有以下特性: 首先就是线程安全,这也估计算是唯一一个优于HashMap的特性了吧; Hashtable不允许key或者value为 阅读全文
posted @ 2020-03-18 18:41 windy杨树 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 目录 一 简介 二 概览 三 源码分析 3.1 查找 3.2 遍历 3.3 插入 3.4 删除 一、简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey、get、p 阅读全文
posted @ 2020-03-18 18:00 windy杨树 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 原理 3 源码分析 3.0 Entry 的继承体系 3.1 链表的建立过程 3.2 链表节点的删除过程 3.3 访问顺序的维护过程 3.4 基于 LinkedHashMap 实现缓存 4 总结 1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基 阅读全文
posted @ 2020-03-18 17:59 windy杨树 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 原理 3 源码分析 3.1 构造方法 3.1.1 构造方法分析 3.1.2 初始容量、负载因子、阈值 3.2 查找 3.3 遍历 3.4 插入 3.4.1 插入逻辑分析 3.4.2 扩容机制 3.4.3 链表树化、红黑树链化与拆分 3.5 删除 3.6 其他细节 3.7 总结 1 阅读全文
posted @ 2020-03-18 17:56 windy杨树 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 继承体系 1 概述 总的来说,Java 容器可以划分为 4 个部分: List 集合 Set 集合 Queue 集合 Map 集合 除了上面 4 种集合之外,还有一个专门的工具类: 工具类(Iterator 迭代器、Enumeration 枚举类、Arrays 和 Collect 阅读全文
posted @ 2020-03-18 17:45 windy杨树 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 1 概述 从名字我们可以看出,其实一个双向队列实现,而且底层采用数组实现。 public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializ 阅读全文
posted @ 2020-03-18 16:49 windy杨树 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 1 概述 PriorityQueue 是一个优先级队列,其底层原理采用二叉堆实现。我们先来看看它的类声明: public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Seriali 阅读全文
posted @ 2020-03-18 16:41 windy杨树 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 2.1 类成员变量 2.2 构造方法 2.3 核心方法 3 总结 1 概述 TreeSet 是 Set 集合的红黑树实现,但其内部并没有具体的逻辑,而是直接使用 TreeMap 对象实现。我们先来看看 TreeSet 的定义。 public class TreeSet< 阅读全文
posted @ 2020-03-18 16:33 windy杨树 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 3 总结 1 概述 LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序。 public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, jav 阅读全文
posted @ 2020-03-18 16:26 windy杨树 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 2.1 类成员变量 2.2 构造方法 2.3 核心方法 3 总结 1 概述 HashSet 是 Set 集合的哈希实现,其继承了 AbstractSet 抽象类,并实现了 Set 接口。 public class HashSet<E> extends AbstractS 阅读全文
posted @ 2020-03-18 16:21 windy杨树 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 1 概述 Stack 是先进后出的栈结构,其并不直接实现具体的逻辑,而是通过继承 Vector 类,调用 Vector 类的方法实现。 public class Stack<E> extends Vector<E> 2 源码分析 Stack 类代码非常简单,其有 3 个 阅读全文
posted @ 2020-03-18 15:51 windy杨树 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 继承体系 3 源码分析 3.1 查找 3.2 遍历 3.3 插入 3.4 删除 4 总结 1.概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。由于 LinkedL 阅读全文
posted @ 2020-03-18 15:41 windy杨树 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 目录 1 概述 2 源码分析 1 概述 Vector 的底层实现以及结构与 ArrayList 完全相同,只是在某一些细节上会有所不同。这些细节主要有: 线程安全 扩容大小 2 源码分析 2.1 线程安全 我们知道 ArrayList 是线程不安全的,只能在单线程环境下使用。而 Vector 则是线 阅读全文
posted @ 2020-03-18 15:28 windy杨树 阅读(153) 评论(0) 推荐(0) 编辑