我们可以通过使用'collections.synchronizedCollection(Collection c)' 或'collections.synchronizedMap(Map c)'来同步集合,我们也可以使用Java并发API,如ConcurrentHashMap或ArrayQueue或BlockingQueue 。包装和并发集合之间的区别
这两种获取同步集合的方式在同步化水平上有差异还是几乎相同?
可以任何一个解释?
我们可以通过使用'collections.synchronizedCollection(Collection c)' 或'collections.synchronizedMap(Map c)'来同步集合,我们也可以使用Java并发API,如ConcurrentHashMap或ArrayQueue或BlockingQueue 。包装和并发集合之间的区别
这两种获取同步集合的方式在同步化水平上有差异还是几乎相同?
可以任何一个解释?
是:大规模并行处理时的速度。
这可以用一种非常简单的方式来说明:想象一下,100个线程正在等待从集合中取出某些东西。
同步方式:99将put置于睡眠状态并且1线程获取其值。
并发方式:100线程立即获取它们的值,没有任何线程被搁置。
现在第二个方法花费的时间比简单的争取多一点的时间,但只要像2个线程的最小使用它一个恒定的基础上,这是非常值得大家拜保存到并发时间执行。
请注意,尽管您可能以“并行方式”读取100个线程,但写入时不适用。 ConcurrentHashMap将内部数组分割成一定数量的部分(默认为16),每个部分都有自己的锁。因此,100个线程将在任何给定时间使用最多16个线程写入其各个部分。 – sudocoder
所以现在按我的理解同步的方式是一个包装,并阻止整个集合对象,并在另一方面并发方式只对象中收集得到同步的,我们可以在同一时间
访问一个集合的2种以上的元素就在这里。源代码是最好的文档。 –
是的,他们是非常不同的。我建议先阅读javadocs,然后阅读一些并发教程。 – jtahlborn