源码分析
carson0408
热衷于编程,喜欢研究算法,挑战难题,享受AC的过程,希望自己能够不断进步,不断成长。
展开
-
HashMap源码解析(JDK1.8)
在早期的HashMap中,最常用的两种数据结构一种是数组,一种是链表结构。HashMap为了解决hash算法带来的hash冲突,所以采用了数组和链表的结合模式,它的底层是一个数组,然后根据求得的hash值在数组相应位置将相应的值插入链表中。但是这样的问题就是,数组的某一个桶的元素很多,那么链表就会很长,从而使得访问效率比较低。因此后来HashMap引入了红黑树的概念。就是当一个桶的...原创 2018-03-31 19:40:17 · 1394 阅读 · 0 评论 -
ArrayList源码解析(JDK1.8)
ArrayList是基于存储元素的Object[] array来实现的,它会在内存中开辟一块连续的空间来存储。ArrayList实现了List<E>, RandomAccess, Cloneable, java.io.Serializable接口,可以看出它是List接口实现类。接下来通过几个方面来了解ArrayList的工作原理。1.基本参数private stati...原创 2018-04-12 10:26:20 · 222 阅读 · 0 评论 -
ReentrantReadWriteLock源码解析
为保证线程安全,经常用到的有内置锁synchronized和ReentrantLock。这两种是明显的互斥锁,每次最多只能有一个线程拥有锁。使用互斥锁可以有效避免“写读冲突”、“写写冲突”、“读读冲突”,从而保证线程安全。但是,很明显,“读读冲突”是不需要避免的,因为多个线程读并不会·出现线程安全问题。如果在读操作比较多的情景下,使用互斥锁,则会显得过于保守强硬,从而抑制了性能。因...原创 2018-05-19 22:02:24 · 209 阅读 · 0 评论 -
LinkedBlockingQueue源码解析
阻塞队列不仅可以作为容器,更重要的是可以作为线程同步的工具。LinkedBlockingQueue是BlockingQueue接口的实现类。因此LinkedBlockingQueue具有BlockingQueue的特征:当生产者线程试图向LinkedBlockingQueue中放入元素时,如果该队列已满,则该线程被阻塞;当消费者线程试图从LinkedBlockingQueue中取出元...原创 2018-08-17 16:46:16 · 195 阅读 · 0 评论