Java ConcurrentHashMap读取、写入和清除()
假设有3个读取线程和1个写入线程。Java ConcurrentHashMap读取、写入和清除(),java,java.util.concurrent,concurrenthashmap,Java,Java.util.concurrent,Concurrenthashmap,假设有3个读取线程和1个写入线程。 写入线程调用map.clear()。它将导致什么异常或影响?它将清除映射,正如其名称所示。清除方法将清除整个映射,即删除所有条目 考虑到并发性,对于读取操作,没有任何变化。他们将只读取地图在访问时的值。但是,对于使用写入操作的其他线程,ConcurrentHashMap会自动等待清除操作完成,这样您就不会体验到非同步并发带来的奇怪效果 仔细阅读官方文档,它解释了所有影响:“考虑到并发性,其他线程将自动等待清除操作完成,然后读取清除的映射。”根据Concurr
写入线程调用map.clear()。它将导致什么异常或影响?它将清除映射,正如其名称所示。清除方法将清除整个映射,即删除所有条目 考虑到并发性,对于读取操作,没有任何变化。他们将只读取地图在访问时的值。但是,对于使用写入操作的其他线程,
ConcurrentHashMap
会自动等待清除
操作完成,这样您就不会体验到非同步并发带来的奇怪效果
仔细阅读官方文档,它解释了所有影响:“考虑到并发性,其他线程将自动等待清除操作完成,然后读取清除的映射。”根据
ConcurrentHashMap
的Javadoc,这种说法是错误的。读卡器不等待写卡器,但它们返回最新的状态,可以访问。您是对的,它只适用于写操作,这也是有意义的,这正是同步所有操作的类的主要优势:可以快速执行读操作,没有同步开销,只有写操作才有这种开销。我将编辑答案。如果用户回答了您的问题,请同时接受他的答案()。如果没有,请说明还有什么问题没有回答,这是StackOverflow的一个非常关键的部分,非常感谢。