我没有看到使用Collections.synchronizedList / synchronizedMap的任何实际价值,而且根据文档我们需要在迭代期间同步列表/映射,这对性能不利。
我可以使用ConcurrentMap / CopyOnWriteArrayList类。基本上我问的是在什么情况下我们只需要使用Collections.synchronizedList / synchronizedMap而不是利用java.util.concurrent包中的类。
答案 0 :(得分:3)
我没有看到使用Collections.synchronizedList / synchronizedMap的任何实际价值,而且根据文档我们需要在迭代期间同步列表/地图,这对性能不利。
无论如何,迭代集合对于性能来说都不是一个好主意。如果你关心性能,你应该构建你的结构,这样它们就不需要迭代了。
我可以使用ConcurrentMap / CopyOnWriteArrayList类。基本上我问的是在什么情况下我们只需要使用Collections.synchronizedList / synchronizedMap而不是利用java.util.concurrent包中的类。
并发集合通常更易于使用。你应该注意到一个小的ConcurrentHashMap会比同步的HashMap大很多倍,所以除非你只有少数几个,所以HashMap仍然是最好的选择。
CopyOnWriteArrayList读取速度非常快,但更新非常昂贵。 (它会在添加或删除时复制整个数组,可能不止一次)