jdk7:
-
在jdk7中是以数组+分段锁(segement)+链表的方式实现,Segment继承自ReentrantLock
-
使用分段锁的方式是将数据分成一块一块的存储,然后给每一块数据配一把锁,当一个线程访问一块数据的时候,其它线程也可以访问其它块的数据,实现并发访问,大大提高并发访问的能力。
jdk8:
- 在jdk8中是以数组+链表+红黑树的方式实现,彻底放弃Segement分段存储
- 其中内部大量采用sycronized和CAS操作,key-value值都是用volatile修饰,保证值的并发可见性