hashtable虽然线程安全,但用synchronize直接锁起来,在多线程中,效率太低
currenthashmap是最优选择
在Java1.8以前,currenthashmap用的是setment,将几个entry作为一个segment,加锁
segment继承ReentrantLock接口,是一种可重入的锁
啥叫可重入锁呢?
比如:一个线程获得一个对象的锁,那这个线程还可以再获得这个对象的锁,可重复获得
currenthashmap维护一个segment数组,segment是一个entry数组

在java 1.8后,给每一个链表或红黑树上加一个synchronize锁,利用CAS来加一个头节点,然后为头节点上synchronize锁

网友评论