ConcurrentHashMap和Hashtable的区别
时间: 2023-10-15 08:31:35 浏览: 81
Hashtable和HashMap区别
ConcurrentHashMap和Hashtable都是线程安全的Map实现,但它们有几个关键的区别:
1. 线程安全性:Hashtable使用synchronized关键字来保证线程安全,即在每个方法上都进行了同步操作。而ConcurrentHashMap则采用了一种不同的机制,即分段锁(Segment Locking),它将整个Map分成了多个小的段(Segment),每个段上都有一个锁。这样,在大多数情况下,不同的线程可以并发地访问不同的段,从而提高了并发性能。
2. 性能:由于ConcurrentHashMap使用了分段锁机制,所以在高并发情况下,不同线程可以同时访问不同的段,从而降低了并发冲突的可能性,提高了性能。而Hashtable在并发场景下需要通过synchronized关键字来保证线程安全,可能会导致性能瓶颈。
3. 迭代器:ConcurrentHashMap的迭代器是弱一致性的,即获取迭代器后,其他线程对Map进行修改不一定会被迭代器立即感知到。而Hashtable的迭代器是强一致性的,即获取迭代器后,其他线程对Map的修改会被迭代器立即感知到。
4. 允许空值和空键:Hashtable不允许存储空值或空键,如果尝试存储空值或空键,会抛出NullPointerException。而ConcurrentHashMap则允许存储空值和空键。
总的来说,ConcurrentHashMap相较于Hashtable在并发性能方面更优秀,因此在多线程环境中通常推荐使用ConcurrentHashMap。
阅读全文