concurrent map1. concurrent hashmap设计为无阻塞,更新时会锁定某些数据。 不会锁定整个表。 同步读取未完全阻止。 在保证合理同步的基础上很有效率。 坏处不能保证对最近的更新做出反应。 例如,如果线程a调用putAll以写入大量数据,而线程b在此期间调用get,则只能获取到目前为止成功插入的数据。
2 .在JDK 1.8版中,ConcurrentHashMap的数据结构接近hashmap,而ConcurrentHashMap只是添加了同步操作以控制并发。
在JDK1.7中使用的ReentrantLock (重新锁定)分段) HashEntry
JDK1.8中使用的同步cas hash entry红黑树
升级原因:
1.JDK1.8的实现降低了锁的粒度。 JDK1.7的粒度基于segment,包含多个散列条目。 JDK1.8基于散列条目
2 .数据结构的变更。 JDK1.8正在同步中进行同步。 不需要分段锁定的概念
3.JDK1.8使用红黑树优化链表。 长链表用红黑树提高效率。
4 .为什么4.JDK1.8使用同步而不是永久锁定
1 .粒度降低,对于低粒度,同步效率不比Reentrantlock差。 2 .同步使用嵌入关键字比使用API更自然。 3 .在大量数据下,对于JVM内存压力,基于API的ReentrantLock会开销更多的内存。 hashtable hashtable的任何操作都会锁定和阻止整个表。 好处是可以看到最新的数据。 缺点:所有操作都需要排队,效率很低。