JDK源码剖析
no_one码农
这个作者很懒,什么都没留下…
展开
-
ThreadLocal源码的实现
分析一下ThreadLocal源码的实现JDK里面的Thread类,内部有一个ThreadLocalMap内部类,代表了一个map,每个Thread线程对象自己内部就有一个核心的数据结构是map这个map只能是某个线程自己内部可以使用的一份数据,是不是就是代表了线程本地的副本。一个Thread可以放多个ThreadLocal对应的本地变量副本数据结构:Thread...原创 2019-07-29 10:47:07 · 66 阅读 · 0 评论 -
CountDownLatch源码剖析
简介如果你的一个线程启动了多个线程来执行一些任务,此时你的这个线程需要同步阻塞等待那些线程都执行完毕了,才可以继续往下走,此时可以用CountDownLatch剖析源码countDownLatch.await():触发了一个线程入队阻塞等待它会调用tryAcquireShared()protected int tryAcquireShared(int acqui...原创 2019-07-29 10:57:12 · 73 阅读 · 0 评论 -
ConcurrentHashMap源码剖析
前言锁优化有一个很重要的思路,就是拆分锁的粒度,类似于分布式锁优化的实践,把一份数据拆分为多份数据,对每一份数据片段来加锁,这样就可以提升多线程并发的效率HashMap底层不就是一个数组的数据结构么?如果你要完全保证里的并发安全,如果你每次对数组做一些put、resize、get的操作的时候,你都是加锁,synchronized好了,此时就会导致并发性能非常的低下所有的线程读写hash...原创 2019-07-29 11:42:21 · 153 阅读 · 0 评论 -
hashmap源码剖析
JDK1.7和JDK1.8中hashmap的对比JDK1.7中如果出现大量的key冲突之后,对长链表遍历找一个key-value对,性能是O(n),如果是直接根据array[index]获取到某个元素,性能是O(1)JDK 1.8以后,优化了一下,如果一个链表的长度超过了8,就会自动将链表转换为红黑树,查找的性能,是O(logn),这个性能是比O(n)要高的链表的遍历性能,时间复杂度是...原创 2019-07-29 13:58:21 · 112 阅读 · 0 评论 -
LinkedHashMap源码剖析
前言HashMap,比如你放了一堆key-value对进去,后面的话呢如果你要遍历这个HashMap的话,遍历的顺序,并不是按照你插入的key-value的顺序来的LinkedHashMap,他会记录你插入key-value的顺序, 如果你在遍历的时候,他是按照插入key-value对的顺序给你遍历出来的LinkedHashMap是HashMap的一个子类。LinkedHashMap和...原创 2019-07-29 14:13:41 · 85 阅读 · 0 评论 -
Iterator的fail fast机制的源码剖析
modCount就是用来实现fail fast机制的,各个集合里面其实都有这个modCount的概念,只要这个集合被修改了(包括add、remove、set),那么就会对modCount++(modificationCount)比如说在迭代一个ArrayList之前,已经插入了4个元素,此时modCount = 4,在你获取和初始化一个迭代器的时候,里面的expectedModCount...原创 2019-07-29 14:28:47 · 151 阅读 · 0 评论 -
HashSet、LinkedHashSet、TreeSet的源码剖析
前言Set底层的Map,只有key是有值的,value都是null值,都是空的。Set可以用Map来实现的,其实就是在map的key里放置,value都是一个空的对象HashSetHashSet,他是一个集合,里面的元素是无序的,他里面的元素是没有重复的HashMap是不允许key重复的,他底层是一个数组,如果你的key重复了,你会hash寻址到数组的同一个位置去,然后覆盖原来...原创 2019-07-29 14:39:15 · 138 阅读 · 0 评论