适用于读操作远大于写操作的场景。
CopyOnWriteArrayList
的读操作不会加锁,写操作也不会阻塞读操作,只有写和写操作之间需要同步等待。
|
|
属性
|
|
读
CopyOnWriteArrayList
的读操作代码完全没有任何同步控制和锁操作,因为内部数组 array 不会发生修改,只会被另外一个 array 替换掉,因此可以保证数据安全。
|
|
写
CopyOnWriteArrayList
的写操作需要使用锁,这个锁仅用于控制写-写的情况。在进行写操作时,会进行一次自我复制,将修改的内容写入 array 的副本,写完后再替换原来的 array(array 是volatile关键字修饰的)。
|
|