我有一个Collections.synchronizedMap()
由线程 A 读取和更新的同步映射(通过)。线程 B 仅通过Map.keySet()
(只读)访问映射。
我应该如何同步这个?文档说keySet() (对于Collections.synchronizedMap)“不需要在同步块中”。我可以将线程 A 的读/写访问权限放在同步块中,但这甚至有必要吗?
如果 Map.keySet 不需要同步(根据上面的文档链接),我想我什至使用同步 Map 或同步块似乎很奇怪......
更新:我错过了 keySet 的迭代必须同步,即使检索 keySet 不需要同步。拥有 keySet 而无法查看它并不是特别令人兴奋,因此最终结果 = 需要同步。改用 ConcurrentHashMap。