diff --git a/docs/JDK/ConcurrentHashMap.md b/docs/JDK/ConcurrentHashMap.md index f3077ed..668c9ff 100644 --- a/docs/JDK/ConcurrentHashMap.md +++ b/docs/JDK/ConcurrentHashMap.md @@ -161,4 +161,5 @@ public class ConcurrentHashMap extends AbstractMap implements Concurre } } ``` -**与JDK1.7在同步机制上的区别** 总结如下。JDK1.7 使用的是分段锁机制,其内部类Segment 继承了 ReentrantLock,将 容器内的数组划分成多段区域,每个区域对应一把锁,相比于HashTable确实提升了不少并发能力,但在数据量庞大的情况下,性能依然不容乐观,只能通过不断的增加锁来维持并发性能。而JDK1.8则使用了 CAS乐观锁 + synchronized局部锁 处理并发问题,锁粒度更细,即使数据量很大也能保证良好的并发性。 \ No newline at end of file +**与JDK1.7在同步机制上的区别** 总结如下: +JDK1.7 使用的是分段锁机制,其内部类Segment 继承了 ReentrantLock,将 容器内的数组划分成多段区域,每个区域对应一把锁,相比于HashTable确实提升了不少并发能力,但在数据量庞大的情况下,性能依然不容乐观,只能通过不断的增加锁来维持并发性能。而JDK1.8则使用了 CAS乐观锁 + synchronized局部锁 处理并发问题,锁粒度更细,即使数据量很大也能保证良好的并发性。 \ No newline at end of file diff --git a/docs/JDK/HashMap.md b/docs/JDK/HashMap.md index 9a00e09..8459d11 100644 --- a/docs/JDK/HashMap.md +++ b/docs/JDK/HashMap.md @@ -95,6 +95,7 @@ public class HashMap extends AbstractMap implements Map, // 对链表进行遍历,并统计链表长度 for (int binCount = 0; ; ++binCount) { // 链表中不包含要插入的键值对节点时,则将该节点接在链表的最后 + // !!! JDK1.7中 新增的Node节点采用头插入,而JDK1.8中改成了尾插入 !!! if ((e = p.next) == null) { p.next = newNode(hash, key, value, null); // 如果链表长度达到阈值,则进化成红黑树