ConcurrentHashMap:锁定更新的重点是什么?

Rom*_*man 7 java concurrency performance multithreading locking

我一直认为,ConcurrentHashMap类似的类(维护同步更新,不同步读取)做了一个非常有用和直观的事情:它们没有锁定读取并锁定更新的所有功能.像这样的策略确保所有事情保持一致.

但是我仔细阅读了文档,并打开了实现ConcurrentHashMap,并且正如我现在所理解的那样,当另一个线程正在执行更新时,它不会阻止读取.如果一个线程开始执行putAll(hugeCollection)而另一个线程同时重复contains(theSameObjectForAllCalls),那么第二个线程可能会在putAll仍在工作时得到不同的结果.

以下是文档中的相关部分:

对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目.

另一个有趣的事情是:

检索反映了最近完成的更新操作的结果.

这不是由于某些锁定,而是因为首先添加了一个新对象,并且只有在该对象计数器递增并且该对象对于读取操作变得可见之后.

那么,锁定更新的重点是什么?

Fai*_*roz 4

Brian Goetz 在开发者工作的一篇文章中解释了这一工作。这应该会有所帮助。