
JDK源码分析
文章平均质量分 89
最新JDK源码分析,知其然知其所以然。By csdn.zxiaofan.com
Z小繁
这个作者很懒,什么都没留下…
展开
-
LinkedBlockingQueue源码分析(JDK8)
本文分析LinkedBlockingQueue的源码,学习其底层实现。LinkedBlockingQueue特性及使用场景:1、基于链表实现,线程安全的阻塞队列。2、“two lock queue”算法变体,双锁(ReentrantLock):takeLock、putLock,允许读写并行,remove(e)和迭代器iterators需要获取2个锁。3、FIFO先进先出模式。4、在大部分并发场景下,LinkedBlockingQueue的吞吐量比ArrayBlockingQueue更好。 LinkedBlo原创 2017-06-10 23:41:03 · 10496 阅读 · 3 评论 -
ThreadLocal源码分析(JDK8)
ThreadLocal特性及使用场景: 1、方便同一个线程使用某一对象,避免不必要的参数传递; 2、线程间数据隔离(每个线程在自己线程里使用自己的局部变量,各线程间的ThreadLocal对象互不影响); 3、获取数据库连接、Session、关联ID(比如日志的uniqueID,方便串起多个日志); ThreadLocal应注意: 1、ThreadLocal并未解原创 2017-01-25 18:13:54 · 17579 阅读 · 5 评论 -
ConcurrentHashMap源码分析--Java8
如果还停留在锁分离、Segment,那已经out了。 Segment虽保留,但已经简化属性,仅仅是为了兼容旧版本。 CAS算法;unsafe.compareAndSwapInt(this, valueOffset, expect, update); CAS(Compare And Swap),意思是如果valueOffset位置包含的值与expect值相同,则更新valueOffset位置的值为update,并返回true,否则不更新,返回false。 与Java8的HashMap有相通之处,底层依然由原创 2016-02-05 09:42:30 · 18048 阅读 · 10 评论 -
HashMap源码分析(jdk1.8)
HashMap源码前前后后看了好几次,也和同事分享过好几次,每次都有新的收获。 分享也是一种提高! 本文首写于个人云笔记(点击访问),经多次修改,短期内不会有重大修改了,现发于此,有任何问题欢迎交流指正。 JDK1.8中采用的是位桶+链表/红黑树的方式,也是非线程安全的。当某个位桶的链表的长度达到某个阀值的时候,这个链表就将转换成红黑树。原创 2015-12-17 20:24:26 · 13110 阅读 · 1 评论 -
ArrayList源码分析(jdk1.8)
前几天自我学习了ArrayList的源码,写了篇云笔记,现将其发布到博客,供大家学习交流,本人并非大神,如有任何问题,欢迎批评指正。 最初是看了这篇文章http://www.cnblogs.com/hzmark/archive/2012/12/20/ArrayList.html,不过是基于jdk1.6的,遂自己分析源码并写下此文,在此表示感谢。 接口 特性原创 2015-10-29 20:08:01 · 11904 阅读 · 0 评论 -
EnumSet源码分析
核心:long(long数组) 和 位运算 其存储结构elements并未直接存枚举本身,而是位标识,枚举存于elementType中的enumConstants中. 1、内部元素为枚举; 2、内部表示为位向量,使用“位标志”的替换形式。(类似0x1000000,按bit存储,用位运算进行相关操作); 3、全部是静态方法static; 4、根据传入的枚举类型判断组成长原创 2016-03-09 13:48:12 · 13255 阅读 · 0 评论 -
HashMap迭代时Remove不抛出ConcurrentModificationException的特例
众所周知,HashMap在迭代时remove会抛出异常,ConcurrentModificationException,但事实真的是这样的吗?的确会抛异常,但也有特例。废话少说,上代码: public class ConcurrentModificationException { public static void main(String[] args) { HashM原创 2016-03-09 22:22:18 · 13266 阅读 · 0 评论 -
Java集合大整理
HashSet 允许,just 1个 no HashMap 同HashMap 【add】:调用HashMap的put方法,put的value传入伪值static final Object PRESENT = new Object(),仅仅为了保持映射关系;(所有value都是同一个对象) 【remove】:调map的remove 有contains, 无get HashMap中的Key是根据对象的hashCode() 和 euqals()来判断是否唯一的。 So:为了保证HashSet中的对象不会出现重复值原创 2016-03-28 23:48:09 · 13518 阅读 · 0 评论 -
EnumMap源码分析
自Java8以来,HashMap是高效的。应用HashMap完成枚举类型到值的映射也是我们常用的方式,但是EnumMap将更加高效。EnumMap顾名思义,是为枚举类服务的。 key必须为枚举类(Enum),且创建EnumMap时必须指定key的类型。key不能为null,NullPointerException,但value允许null。底层结构均为数组,大小为Enum成员数量,创建E原创 2016-03-10 08:39:39 · 12821 阅读 · 0 评论