java - Collections.synchronizedList/synchronizedMap 的真正值(value)是什么?

标签 java multithreading

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

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

最佳答案

I don't see any real value of using Collections.synchronizedList/synchronizedMap, and further more as per documentation we need to synchronize list/map during iteration, which is not good for performance.

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

I can just use ConcurrentMap/CopyOnWriteArrayList class. Basically I'm asking in what case we only need to use Collections.synchronizedList/synchronizedMap rather than utilize classes in java.util.concurrent package.

并发集合通常更易于使用。您应该注意,小型 ConcurrentHashMap 将比同步 HashMap 大很多倍,因此除非您只有其中几个,否则 HashMap 仍然可能是最佳选择。

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

关于java - Collections.synchronizedList/synchronizedMap 的真正值(value)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771196/

相关文章:

java - 访问已编译的 jar/war 文件之外的文件

java - 在JPA中使用Native SQL描述表结构

java - 目标行 Javadoc

java - 检查firebase实时数据库中的数据不起作用

java - 线程安全的程序如何包含非线程安全的类?

wpf - 在单独的线程WPF上更新两个单独的UI

java - 如何使用 FusedLocation API 每 5 分钟接收一次位置更新

c++ - 如何为 MFC 线程设置超时

java - 如何使用 NetBeans 消除 Java 代码中的死锁

c++ - boost::condition::timed_wait 的使用示例