我们为什么在这里,特别是说ArrayList不是线程安全的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们为什么在这里,特别是说ArrayList不是线程安全的?相关的知识,希望对你有一定的参考价值。
描述:如果我们在多个线程中使用相同的对象引用,则没有对象是线程安全的。同样,如果在多个线程之间共享任何集合引用,则该集合不是线程,因为其他线程可以访问它。那么,为什么我们在这里专门说ArrayList不是线程安全的呢?那其他的收藏呢?
ArrayList在实现中不同步。当对象不同步时,表示该对象在进行结构修改时未锁定。A structural modification is any operation that adds or deletes one or more elements, or explicitly resizes the backing array; merely setting the value of an element is not a structural modification.
您所指的是一个数组,要向其中添加或删除元素,并且可以对其进行修改,这与设置其值的方式有所不同。
参考是关于数组开头的指针,但是有多少个元素存在问题,在元素意义上修改非同步对象可能会导致元素链断开,因为序列丢失了。我希望我已清楚地传达了这一信息。
在此处查找更多详细信息:Oracle
我尚未检查,但我认为所有标准Collection实现都声明它们是否是线程安全的。因此,您知道是否可以在不同步的情况下在不同线程之间共享该集合。
例如,CopyOnWriteArrayList是线程安全的List实现。
以上是关于我们为什么在这里,特别是说ArrayList不是线程安全的?的主要内容,如果未能解决你的问题,请参考以下文章