Java 包装器和并发集合之间的区别

Java 包装器和并发集合之间的区别,java,collections,Java,Collections,我们可以使用“collections.synchronizedCollection(collection c)”同步集合 或者“collections.synchronizedMap(Map c)”,我们还可以使用java并发API,如ConcurrentHashMap、ArrayQueue或BlockingQueue 这两种获取同步集合的方法在同步级别上是否存在差异,或者它们几乎相同 有人能解释吗?是的:大规模并行处理过程中的速度 这可以用一种非常简单的方式来说明:假设100个线程正在等待从集

我们可以使用“collections.synchronizedCollection(collection c)”同步集合 或者“collections.synchronizedMap(Map c)”,我们还可以使用java并发API,如ConcurrentHashMap、ArrayQueue或BlockingQueue

这两种获取同步集合的方法在同步级别上是否存在差异,或者它们几乎相同


有人能解释吗?

是的:大规模并行处理过程中的速度

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

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

  • 并发方式:100个线程立即获得它们的值,没有一个线程被搁置


现在,第二种方法比简单的get要花费更多的时间,但只要至少有2个线程在恒定的基础上使用它,由于并行执行,您节省的时间非常值得。

因此,根据我的理解,现在同步的方式是一个包装器并阻止整个集合对象,另一方面,以并行方式,只有集合内的对象才能同步,我们可以同时访问集合的两个或多个元素。

是的。源代码是最好的文档。是的,它们非常不同。我建议从阅读javadocs开始,然后阅读一些并发性教程。ConcurrentHashMap将内部数组分成一定数量的部分(默认情况下为16个),每个部分都有自己的锁。因此,在任何给定的时间,100个线程将最多使用16个线程来写入各自的部分。