ConcurrentHashMap(锁分离):
ConcurrentHashMap使用分段锁技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问。ConcurrentHashMap内部分为很多个Segment,每一个Segment拥有一把锁,然后每个Segment(继承ReentrantLock)
HashTable:
是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占。
HashMap:
装箱操作,数组连续存储,Entry
SparseIntArray:
无装箱,两个一维数组存储,内部使用二分查找,所以如果正好是逆序,想插入,效率低
关于同步和锁:
Synchronize:
JVM决定释放,避免死锁,不能决定释放时机,执行结束或抛异常会释放
Lock:
主动调用释放,更加灵活,但可能死锁,需要小心处理,finally释放
关于读写锁参考小例子:https://www.jb51.net/article/79188.htm