ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

ConcurrentHashMap线程安全的,允许一边更新、一边遍历,也就是说在对象遍历的时候,也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,而如果用HashMap则会报线程安全问题。

以下例子分别使用HashMap、ConcurrentHashMap、HashTable在遍历的同时删除,

 情况一、使用HashMap进行遍历的同时删除

ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

HashMap不能一边遍历一边更新,否则报异常ConcurrentModificationException

ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

 情况二、使用ConcurrentHashMap进行遍历的同时删除

ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

而ConcurrentHashMap不存在该问题,输出结果为0.

 情况三、使用HashTable进行遍历的同时删除

ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

如果用性能较低的安全容器HashTable,也报异常ConcurrentModificationException。

 

上一篇:java集合-哈希表HashTable


下一篇:java Map集合总结