java - 为什么有线程安全收集的要求?

标签 java jakarta-ee collections thread-safety thread-synchronization

如果我们很容易将非线程安全的集合转换为线程安全的,为什么我们需要线程安全的集合。

例如:我们可以使用 Collections.synchronizedList() 方法创建 Synchronized ArrayList。

最佳答案

  • synchronizedList 只是用独占锁包裹了所有方法。这对你来说可能太严格了。例如,您可能非常希望允许任意数量的并发读取操作同时进行(并且仅序列化写入)。专门的实现可以提供这一点。

  • synchronizedList 仅在其内部状态不会被破坏的意义上是线程安全的。那may not be enough为您的应用程序。例如 if (list.isEmpty()) list.add(1); 即使在同步列表上也不是线程安全的。 for (String x: list) 也不会为您提供快照迭代。专门的实现可以添加更高级别的原子操作。

关于java - 为什么有线程安全收集的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57197485/

相关文章:

java - 在条件语句中声明变量及其类型

java - 使用不同计算机上的模拟器将客户端连接到服务器

jakarta-ee - 如何在 Multi-Tenancy 环境中使用 JPA @Column(unique = true)?

java - 为什么 Hashtable 不带空键?

java集合保持顺序并且应该是唯一的

c# - Entity Framework 以 1-* 关系存储集合大小

java - 使用Jsp发送 SOAP 信封

java - 错误 :null value in entry: annotationProcessorOutputFolder=null?

java - 我可以使用普通的java类文件形式的web.xml文件读取上下文参数吗

java - Primefaces 数据表搜索过滤器