2013-10-16 67 views
0

我们可以通过使用'collections.synchronizedCollection(Collection c)' 或'collections.synchronizedMap(Map c)'来同步集合,我们也可以使用Java并发API,如ConcurrentHashMap或ArrayQueue或BlockingQueue 。包装和并发集合之间的区别

这两种获取同步集合的方式在同步化水平上有差异还是几乎相同?

可以任何一个解释?

+5

访问一个集合的2种以上的元素就在这里。源代码是最好的文档。 –

+2

是的,他们是非常不同的。我建议先阅读javadocs,然后阅读一些并发教程。 – jtahlborn

回答

1

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

这可以用一种非常简单的方式来说明:想象一下,100个线程正在等待从集合中取出某些东西。

  • 同步方式:99将put置于睡眠状态并且1线程获取其值。

  • 并发方式:100线程立即获取它们的值,没有任何线程被搁置。

现在第二个方法花费的时间比简单的争取多一点的时间,但只要像2个线程的最小使用它一个恒定的基础上,这是非常值得大家拜保存到并发时间执行。

+0

请注意,尽管您可能以“并行方式”读取100个线程,但写入时不适用。 ConcurrentHashMap将内部数组分割成一定数量的部分(默认为16),每个部分都有自己的锁。因此,100个线程将在任何给定时间使用最多16个线程写入其各个部分。 – sudocoder

0

所以现在按我的理解同步的方式是一个包装,并阻止整个集合对象,并在另一方面并发方式只对象中收集得到同步的,我们可以在同一时间