synchronized vs lock vs synchronized map

Bic*_*ick 1 java synchronization


我需要同步我对hashmap的访问.这是我的选择

  1. 我知道我可以使用Synchronize关键字.这是一种选择.我可以使用地图本身吗?
  2. 目前我有一个get方法,如果该对象不存在,则创建它并将其放入地图中.我可以同步方法.
  3. 我可以使用同步块
  4. 我可以使用
    Map m = Collections.synchronizedMap(new HashMap(...)); 在我的代码中.

我倾向于做4因为听起来最简单.有什么建议?

Jon*_*eet 5

我建议您不要使方法同步,并且不要锁定地图本身.我通常更喜欢使用一个单独的锁定对象,该对象用于锁定,并且在拥有该地图的类中知道.

你可以潜在地使用synchronizedMap,但是这取决于你想用它做什么.如果你只得到并放置价值,那就没关系.如果您需要遍历地图,则需要阻止其他线程在您进行迭代时修改地图.

另一个选择是使用a ConcurrentHashMap.请参阅语义文档.如果它按照您需要的方式运行,这可能是最简单的方法.