ConcurrentHashMap
是 Java
中的一个线程安全的哈希表,它可以被多个线程同时访问而无需进行额外的同步措施。与普通的哈希表不同的是,ConcurrentHashMap
利用了锁分段技术来保证线程安全。具体地说,它将整个桶数组分成了多个段(Segment),每个段都是一个独立的小哈希表,拥有自己的锁。多个线程可以同时访问不同的段,从而实现了高并发下的高效读写。
为了使得 ConcurrentHashMap
支持高并发的访问,其内部采用了一些复杂的算法,例如“低粒度的锁分离策略”、CAS 操作、自旋锁等,以及优化的哈希算法等。
ConcurrentHashMap
的常用操作:
- put(K key, V value):添加键值对到映射表中。
- get(Object key):获取指定键对应的值。
- remove(Object key):删除指定键值对。
- size():获取映射表的大小。
需要注意的是,在多线程环境下, ConcurrentHashMap
的迭代器可能会抛出 ConcurrentModificationException
异常,因为它在遍历时不会阻塞其他线程的修改操作。如果需要在遍历时修改映射表,可以使用 ConcurrentHashMap
提供的线程安全的 Spliterator
迭代器。