
jdk源码
Edingbrugh.南空
这个作者很懒,什么都没留下…
展开
-
jdk源码分析之 LinkedBlockingQueue
简介: 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。LinkedBlockingQueue是基于链表实现的。整体架构LinkedBlockingQueue的类图如下:从类图可以知道,LinkedBlockQueue实现的路线有两条。一、AbstarctQueue -> AbstarctCollection ->原创 2020-12-07 16:57:25 · 176 阅读 · 0 评论 -
jdk源码分析之 ConcurrentHashMap
整体架构:ConcurrentHashMap 继承了AbstractMap及实现了ConcurrentMap。从类注解获得的信息所有的操作都是线程安全的,可以放心使用,无需再加锁;多个线程同时进行 put、remove 等操作时并不会阻塞,可以同时进行,和 HashTable 不同,HashTable 在操作时,会锁住整个 Map;(所以有些时候要求数据是强一致性时,要使用HashTable,ConcurentHashMap只是弱一致性)。迭代过程中,即使 Map 结构被修改,也不会抛 Con原创 2020-11-25 10:25:57 · 333 阅读 · 0 评论 -
jdk源码分析之 HashTable
HashTable整体架构HashTable实现哈希表,该哈希表将键映射到值。可以是任何不为空的key或者value。主要是因为HashTable的存储或者检索key必须实现hashCode 和equals方法原创 2020-10-10 13:42:35 · 195 阅读 · 0 评论 -
jdk源码分析之 LinkedList
LinkedList整体架构LinkedList底层是基于双向链表实现的,链表的每一个节点叫做Node,Node有一个属性prev,代表Node的前一个节点的位置,属性next代表Node后一个节点的位置。first是双向链表的头结点,其prev属性指向位置的为NULL。last是双向链表的尾结点,其next属性的指向NULL。当linkedList数据为空时,first节点和last节点是统一节点,该节点的prev和next都为null。因为LinkedList是基于双向链表实现的,只要机器的大小足够,原创 2020-09-29 15:06:22 · 128 阅读 · 0 评论 -
jdk源码分析之 Vector
Vector源码的类注解:Vector类实现了一个可扩展的数组对象。像数组一样,它包含可以使用整数索引访问。Vector 是同步访问,的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。如果迭代时,数据发生了改变会,会快速的失败,抛出ConcurrentModificationException异常。Vector是线程安全的,可以放心使用,但是在不考虑线程安全的问题时,建议使用ArrayList替代.原创 2020-09-28 23:31:11 · 112 阅读 · 0 评论 -
jdk源码分析之 HashSet
HashSet的基于HsahMap的基础上组装起来的类,其类图继承关系如下。从类继续关系图知道HashSet实现了Iterabel和Set、Collectionsh、Cloneable、Serializable的接口及继承AbstractSet.。HashSet的重要的成员变量 // HashSet是基于HashMap来实现的Set集合功能 private transient HashMap<E,Object> map; // 用于放在HashMap 的默认值,为原创 2020-09-27 22:39:13 · 212 阅读 · 0 评论 -
jdk源码分析之 ArrayList
ArrayList 关系类图如下:从ArrayList的类注解可以得知一些重要的信息如:允许 put null 值,会自动扩容;size、isEmpty、get、set、add 等方法时间复杂度都是 O (1);是非线程安全的,多线程情况下,推荐使用线程安全类:Collections.synchronizedCollection();增强 for 循环,或者使用迭代器迭代过程中,如果数组大小被改变,会快速失败,抛出异常。...原创 2020-09-24 16:03:05 · 118 阅读 · 0 评论 -
jdk源码分析之 LinkedBlockingQueue
LinkedBlockingQueue简介:LinkedBlockingQueue 中文叫做链表阻塞队列,单从名字就可以得知其底层的实现是由链表来实现的。其原理为使用链表+锁+迭代器来完成。有链表实现的阻塞队列,队列的尾为链表的尾节点,队首为链表的头节点。在入对和出对都由ReentrantLock实现的takeLock和putLock来实现加锁从而到达,线性安区和队列阻塞。其关心类图如下:从类图中可知LinkedBlockingQueue->BlockingQueue -> Queue -原创 2020-08-05 22:44:04 · 189 阅读 · 0 评论 -
jdk源码分析之 hashMap
实现方式HashMap与HashTable 的区别:HashMap大致等于hashTable,它们都不能保证map的有序性,特别随着时间的推移不能保证是一个有序性。(注:TreeMap和LinkedHashMap可以保证map的有序性,若需要使用有序性map,则不要使用HashMap)不同:1 HashMap允许使key和value为空,而hashTable则不允许。2 HashMap所有的操作都没有通过synchronized 修饰,多线程环境下是不能保证。若要HsahMap线程安全可以使用原创 2020-05-12 17:04:08 · 253 阅读 · 0 评论