在JDK1.8中,ConcurrentHashMap使用节点锁的思想,即采用"CAS + Synchronized"的
机制来保证线程安全
ConcurrentHashMap通过CAS原子操作来无锁更新数据,减少锁竞争。
只在必要时加锁,且锁粒度较小,仅作用于某个桶中的链表或树的头节点,而不是整个哈希表。这种细粒度的锁机制大大减少了锁的竞争,提高了并发性能
例如,在插入一个新的键值对时,如果目标桶的位置为空,
ConcurrentHashMap 会使用 CAS 操作尝试将新的节点放入。如果多个线程同时尝试插入,只有一个线程能够成功,其他线程会进行重试。
如果桶位置不为空,在链表或红黑树中更新节点时,ConcurrentHashMap 使用 synchronized 锁进行保护,以确保操作的原子性和线程安全。