我正在阅读 的文档java.util.HashMap
,它说:
如果多个线程同时访问此映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。
这是什么意思?“它”可以解释为表示修改映射的线程,也可以表示映射本身。
“多线程读取安全”和“只有在有编写器时才在单线程上安全”两种情况都不是明智之举(至少对我而言),这让我相信在文档意味着该语句应该被解释为“安全地读取多个线程和一个线程写入”,而不是“当你有一个作家时锁定一切”。
更重要的是,.Net 中的哈希表实现(明确地)记录为:
Hashtable 是线程安全的,可供多个读取线程和单个写入线程使用
(默认情况下,.Net 类不是线程安全的),因此“多个读取器线程和一个单个写入器线程”的情况必须有一些东西。