我需要同步我对hashmap的访问。
这是我的选择
我倾向于做4因为听起来最简单。有什么建议?
答案 0 :(得分:5)
我建议您不使方法同步,并且您不会锁定地图本身。我通常更喜欢使用一个单独的锁定对象,该对象仅用于 用于锁定,而仅在拥有该地图的类中已知。
你可能可能使用synchronizedMap
,但这取决于你想用它做什么。如果你只得到并放置价值,那就没关系。如果您需要在地图上迭代,则需要阻止其他线程在您进行迭代时修改地图。
另一种选择是使用ConcurrentHashMap
。请参阅语义文档。如果它的行为符合您的需要,这可能是最简单的方法。
答案 1 :(得分:2)
您可以使用ConcurrentHashMap.putIfAbsent(),它可以在没有同步的情况下执行您想要的操作。