- 博客(4)
- 收藏
- 关注
原创 浅谈ReadWriteLock
1.什么是读写锁?为什么使用读写锁,优势在哪里? 在并发的情况下,如果多个线程同时读一个资源类是没有任何问题的;但是,多个线程同时去写入或者修改一个资源类就会存在问题。如果使用非读写锁,理论上所有读之间、读与写之间、写和写之间都是串行操作,这样会使代码运行效率大打折扣。 读写锁的意义在于同一时刻可以允许多个多线程去读,但是在任何一个写线程访问的时候,所有的读线程和其他写线程都会被阻塞。读写锁实际维护了一对锁,一个读锁,一个写锁,通过分离读锁和写锁,来提升代码运行效率。 写锁是可重入排他锁,如果当前线程已经
2022-05-23 14:59:09
270
原创 JDK1.8HashMap源码解析之resize扩容操作
一、概述 1.根据不同情况对容量以及阈值进行赋值 2.如果旧哈希表不为空,创建新哈希表准备扩容 3.遍历旧哈希表 (1)只有一个头节点的链表,将该头节点重新结算哈希放到新的哈希表 (2)红黑树 (3)遍历链表,如果扩容后的下标是否扩容前的相等, JDK1.8关于HashMap扩容时的resize()方法中(e.hash & oldCap) == 0算法讲解.将该节点放到新的哈希表,否则将下标加上扩容前容量放到新的哈希表 一、源码解析 final HashMap.Node<K,V&g
2021-11-08 14:03:57
464
原创 JDK1.8HashMap源码解析之put操作
嗯,这是一篇想了很久之后准备写的一篇关于HashMap源码解析的文章,如有不足之处欢迎下方评论! 一、变量 /** * 默认容量 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; /** * 最大容量 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 加载因子 */
2021-11-04 17:19:49
502
原创 JDK1.8关于HashMap扩容时的resize()方法中(e.hash & oldCap) == 0算法讲解
JDK1.8关于HashMap扩容时的resize()方法中(e.hash & oldCap) == 0算法讲解(易懂!!!) 话不多说,直接上重点! 省略... if ((e.hash & oldCap) == 0) { if (loTail == null) loHead = e; else loTail.next = e; loTail = e; } else { if (hiTail == null) h
2021-11-04 10:39:43
791
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅