【发布时间】:2012-08-18 06:54:06
【问题描述】:
我有一个由线程 A 读取和更新的同步 Map(通过 Collections.synchronizedMap())。线程 B 仅通过 Map.keySet()(只读)访问该 Map。
我应该如何同步这个? docs say keySet()(对于 Collections.synchronizedMap)“不需要在同步块中”。我可以将线程 A 的读/写访问权限放在同步块中,但这有必要吗?
如果 Map.keySet 不需要同步(根据上面的文档链接),我想我什至使用同步 Map 或同步块似乎很奇怪...
更新:我错过了 keySet 的迭代必须同步,即使检索 keySet 不需要同步。拥有 keySet 而无法查看它并不是特别令人兴奋,因此最终结果 = 需要同步。改为使用 ConcurrentHashMap。
【问题讨论】:
-
@tuğrulbüyükışık 不。一般 Java 并发问题。
标签: java multithreading data-structures map synchronized