的java:将值添加到地图由多个线程(这可能吗?)(java: adding values to a

2019-10-18 13:09发布

它是线程安全的,同时添加元素的地图由多个线程?
就像如果10个线程正好在同一时间一个元素添加到地图中,地图将有10种元素或1?

更新:我不需要通过这个地图迭代,我需要的是添加,删除,并获得通过的关键要素

Answer 1:

检查的ConcurrentHashMap适合你的情况。



Answer 2:

有几种方法来处理这个问题:

  1. 使用Hashtable 。 这通常不建议。 哈希表从Java 1.2早于Java集合框架,但它put()get()方法 synchronized ;
  2. 环绕你MapCollections.synchronizedMap()这是一个更好的版本的(1));
  3. 使用ConcurrentHashMap ; 要么
  4. 实现自己的同步方案(不推荐)。


Answer 3:

你的问题是没有意义的,因为Map是一个接口类型,线程安全是实现财产。

话虽这么说,最常用的Map实现,具体HashMap 不是线程安全的。 加入来自不同线程的元件可以放置在液晶已插入例如元素不能虽然检索不一致的状态的图size()表明,它们是本。

您可以使用Collections.synchronizedMap()来创建一个同步的包装,或用旧Hashtable类(不推荐),也同步。 但需要注意的是,这些都还只是线程单操作 - 即彼此依赖,想通过地图迭代,仍需要额外的手动同步操作的顺序。

ConcurrentHashMap是一个非常有趣的实现,允许某些类型的多线程访问,而无需使用sychronization,产生很好的表现时,有很多并行访问它的线程。 但它并不适用于所有的用例。



文章来源: java: adding values to a map by multiple threads (is it possible ?)