ConcurrentHashMap的弱一致性

ConcurrentHashMap提供的迭代器不会抛出ConcurentModificationException,也就是说迭代器如果发现数据被修改了,它会尽量去访问到对Map已做的修改,但这个不能保证。

所以它读到的可能是过期的数据,也就是存在“弱一致性”问题。 对于一个被 并发访问的ConcurrentHashMap来说,size()和isEmpty()往往是不准确的。

但不要误会,以为ConcurrentHashMap的一致性很弱;除了迭代、size()、isEmpty()等操作有这个问题之外,像remove(), put()操作等都比HashMap提供了更高的一致性,因为这些操作都是原子操作。 这些操作中使用了粒度比较细的锁,不会像HashTable一样锁住整个容器,但也不至于像HashMap那样完全不加锁。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.