Lea*_*ner 16 java multithreading thread-safety concurrenthashmap
我试图找到这些答案,但无法在Google或Java文档中找到它.
情况1:在ConcurrentHashMap,假设线程t1正在从段n读取,并且在同一个另一个线程t2想要在同一段n上写入:
问题1:这两个操作将是一个接一个,还是会同时执行?
情况2:在ConcurrentHashMap,假设线程t1正在写入段n,并且在同一个另一个线程t2想要从同一段n读取,
问题2:这两个操作将是一个接一个,还是会同时执行?
kan*_*kan 21
我想javadoc会回答你的两个问题:
检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的更新操作的结果.对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目.
细分用于更新操作:
更新操作之间允许的并发性由可选的concurrencyLevel构造函数参数(缺省值16)引导,该参数用作内部大小调整的提示.
因此,简而言之,读取不会被阻止(它被实现为读取volatile变量).如果写入在同一段中,则写入可能会相互阻塞.