ConcurrentHashMap和HashTable的区别
时间: 2023-11-08 19:03:34 浏览: 62
ConcurrentHashMap和HashTable都是线程安全的Map实现类,但它们之间有几个重要的区别:
1. 性能:ConcurrentHashMap在多线程环境下可以提供更好的并发性能,而HashTable在并发环境下表现不如ConcurrentHashMap。
2. 锁策略:ConcurrentHashMap使用了分段锁(Segment),每个Segment可以看成一个小的HashTable,只锁住当前操作的Segment,而其他的Segment不会被锁住,从而提高了并发性能。HashTable则是在整个table上加锁。
3. 数据一致性:ConcurrentHashMap在多线程环境下可以保证数据的一致性,而HashTable如果在多线程环境下使用,需要在外部进行同步处理。
4. 迭代器:ConcurrentHashMap的迭代器是弱一致性的,因为在迭代期间可能发生插入、更新或删除操作,所以迭代器可能会反映出一些还未完成或已经撤销的操作;HashTable则没有这个问题,因为所有操作都是在同步块中完成的。
示例代码:
```
// ConcurrentHashMap示例
Map<String, String> concurrentHashMap = new ConcurrentHashMap<>();
concurrentHashMap.put("key1", "value1");
concurrentHashMap.put("key2", "value2");
String value = concurrentHashMap.get("key1");
// HashTable示例
Hashtable<String, String> hashTable = new Hashtable<>();
hashTable.put("key1", "value1");
hashTable.put("key2", "value2");
String value = hashTable.get("key1");
```