
源码分析
Marvellous丶
这个作者很懒,什么都没留下…
展开
-
HashMap底层数据结构、HashMap是怎样将数组初始容量的长度转化为2的整数次幂的、为什么数组的长度必须是2的指数次幂、为什么加载因子是0.75、为什么链表长度大于等于8时转成了红黑树
一、HashMap底层数据结构JDK1.7及之前:数组+链表JDK1.8:数组+链表+红黑树关于HashMap基本的大家都知道,但是为什么数组的长度必须是2的指数次幂,为什么HashMap的加载因子要设置为0.75,为什么链表长度大于等于8时转成了红黑树?HashMap添加元素分析当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该put的位置,通常我们为了使元素时分...原创 2019-09-29 16:03:52 · 1197 阅读 · 1 评论 -
JDK1.7中HashMap死环问题及JDK1.8中对HashMap的优化源码详解
一、JDK1.7中HashMap扩容死锁问题我们首先来看一下JDK1.7中put方法的源码我们打开addEntry方法如下,它会判断数组当前容量是否已经超过的阈值,例如假设当前的数组容量是16,加载因子为0.75,即超过了12,并且刚好要插入的索引处有元素,这时候就需要进行扩容操作,可以看到resize扩容大小是原数组的两倍,仍然符合数组的长度是2的指数次幂我们再进入resize方法如下...原创 2019-10-02 13:30:30 · 949 阅读 · 2 评论 -
用户线程与内核线程、线程池及其工作原理
一、用户线程与内核线程用户线程(ULT):指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统的核心,应用进程利用线程库创建、同步、调度和管理线程函数来控制用户线程。另外,因为用户线程是由应用进程利用线程库创建和管理,不依赖于操作系统核心,不需要进行用户态与核心态的切换,速度快,操作系统的内核不知道多线程的存在,因此一个线程阻塞将使得整个进程包括其所有线程阻塞内核线程(KLT)...原创 2019-10-05 16:48:35 · 1957 阅读 · 0 评论