09Java8开始ConcurrentHashMap,为什么舍弃分段锁?
ConcurrentHashMap的原理是引用了内部的Segment(ReentrantLock)分段锁,保证在操作不同段map的时候,可以并发执行,操作同段map的时候,进行锁的竞争和等待。从而达到线程安全,且效率大于synchronized。但是在Java8之后,JDK却弃用了这个策略,重新使用了synchronized+CAS。弃用原因通过JDK的源码和官方文档看来,他们认为的弃用分段锁的原因由以下几点:1.加入多个分段锁浪费内存空间。2.生产环境中,map在放入时竞争同一个锁的概率非常小,分段锁反而会造成更新等操作的长时间等待。3.为了提高GC的效率4.新的同步方案
来自:容器和Map-Map、set集合(后序会删除)