ArrayList(Collection <?extends E> c)线程安全吗?

Dan*_*sev 5 java multithreading arraylist thread-safety

在没有任何其他同步的情况下创建ArrayListvia构造函数的新实例是不是线程安全ArrayList(Collection<? extends E> sourceCollection),假设它sourceCollection是同步的?更具体地说,我们可以在新列表中依赖于这种情况来准确包含new ArrayList(sourceCollection)当时调用的集合中的元素吗?我们可以依赖新列表处于一致状态吗?

我问这个问题是因为我在书中看到了关于如何将对象限制在线程堆栈上的局部变量的并发性的书中的例子.在这些示例中,方法传递对共享对象的引用,并且在方法内部,对象的副本存储在本地变量中 - 所有这些都没有任何同步.据称可以通过这种方式实现螺纹安全.一般的例子是:

public void someMethod(Collection<String> source) {
    List<String> localList = new ArrayList<>(source);
    ...
}
Run Code Online (Sandbox Code Playgroud)