【问题标题】:Difference between Wrappers and Concurrent collectionWrappers 和并发集合的区别
【发布时间】:2013-10-24 21:44:58
【问题描述】:

我们可以使用 'collections.synchronizedCollection(Collection c)' 来同步一个集合 或 'collections.synchronizedMap(Map c)' 我们也可以使用 Java 并发 API,如 ConcurrentHashMap 或 ArrayQueue 或 BlockingQueue。

这两种获取同步集合的方式在同步级别上是否有任何差异,或者它们几乎相同?

谁能解释一下?

【问题讨论】:

  • 是的。源代码是最好的文档。
  • 是的,它们非常不同。我建议先阅读 javadocs,然后阅读一些并发教程。

标签: java collections


【解决方案1】:

是:大规模并行处理的速度。

这可以用一个非常简单的方式来说明:假设有 100 个线程正在等待从集合中取出一些东西。

  • 同步方式:99 个线程进入睡眠状态,1 个线程获取其值。

  • 并发方式:100个线程立即取值,没有一个被搁置。

现在第二种方法比简单的 get 花费更多的时间,但只要至少有 2 个线程在持续使用它,那么由于 concurrent 而节省时间是非常值得的em> 执行。

【讨论】:

  • 请注意,虽然您可能会以“并发方式”读取 100 个线程,但对于写入而言并非如此。 ConcurrentHashMap 将内部数组分成一定数量的部分(默认为 16 个),每个部分都有自己的锁。因此,在任何给定时间,100 个线程将使用最多 16 个线程写入各自的部分。
【解决方案2】:

所以现在根据我的理解,同步方式是一个包装器并阻塞整个集合对象,另一方面,在并发方式中,只有集合内的对象才会同步,我们可以同时访问一个集合的 2 个或多个元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多