引言:
我们都知道将ArrayList作为共享变量,在多线程的情况下是不安全的,解决方法是使用Collections中的SynchronizedList方法,或者我们代码中进行加锁,其实还有另一种线程安全的List,就是CopyOnWriteArrayList,接下来会分析CopyOnWriteArrayList,并提供相关面试题。
先对CopyOnWriteArrayList进行一个总体概览,它具有三个特点:
- 线程安全的,多线程环境下可以直接使用,无需加锁;
- 通过锁 + 数组拷贝 + volatile 关键字保证了线程安全;
- 每次数组操作,都会把数组拷贝一份出来,在新数组上进行操作,操作成功之后再赋值回
去。