如果我们很容易将非线程安全的集合转换为线程安全的,为什么我们需要线程安全的集合。
例如:我们可以使用 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/