Collections.synchronizedList / synchronizedMap的真正价值是什么?

时间:2013-07-21 10:08:50

标签: java multithreading

我没有看到使用Collections.synchronizedList / synchronizedMap的任何实际价值,而且根据文档我们需要在迭代期间同步列表/映射,这对性能不利。

我可以使用ConcurrentMap / CopyOnWriteArrayList类。基本上我问的是在什么情况下我们只需要使用Collections.synchronizedList / synchronizedMap而不是利用java.util.concurrent包中的类。

1 个答案:

答案 0 :(得分:3)

  

我没有看到使用Collections.synchronizedList / synchronizedMap的任何实际价值,而且根据文档我们需要在迭代期间同步列表/地图,这对性能不利。

无论如何,迭代集合对于性能来说都不是一个好主意。如果你关心性能,你应该构建你的结构,这样它们就不需要迭代了。

  

我可以使用ConcurrentMap / CopyOnWriteArrayList类。基本上我问的是在什么情况下我们只需要使用Collections.synchronizedList / synchronizedMap而不是利用java.util.concurrent包中的类。

并发集合通常更易于使用。你应该注意到一个小的ConcurrentHashMap会比同步的HashMap大很多倍,所以除非你只有少数几个,所以HashMap仍然是最好的选择。

CopyOnWriteArrayList读取速度非常快,但更新非常昂贵。 (它会在添加或删除时复制整个数组,可能不止一次)