对象存储在线程安全收集线程中是否安全?

GJ1*_*J13 0 java concurrency multithreading

存储在线程安全集合(如CopyOnWriteArrayList)中的对象是否安全?让我们说存储的对象是可变的(不是线程安全的)然后集合(这里是CopyOnWriteArrayList)是线程安全的事实提供了对存储在其中的引用的线程安全性的任何保证吗?

Zim*_*oot 5

不,对象不是线程安全的; 如果两个线程更改了从CopyOnWriteArrayList检索到的可变对象,那么它们将导致数据争用.

如果集合是线程安全的,那么这意味着两个线程可以在不破坏集合的情况下添加/删除集合中的对象(例如,ArrayList不是线程安全的,因此如果两个线程都尝试将对象添加到集合中,那么一个或两个对象可能会丢失),但是仍然需要同步集合中的对象以使它们成为线程安全的.

  • @gparyani - "太多"同步不会导致死锁.死锁是由*同步的错误模式*引起的.这种模式不是产生差异的数量. (2认同)