写时复制,是一种保证线程安全的手段。就是在忘集合添加数据时,先copy原有集合到一个新的集合,然后在新的集合上添加数据,最后保存新的集合。(注意集合对象的声明使用volatile,保证写对读可见)
但是同时写的话,还是有线程安全问题,所以写的方法是加锁的(这里加锁用的是ReentrantLock)
缺点:不停的copy对内存和性能影响都很大,所以适用在写比较少的场景
以上可以引申问:volatile、ReentrantLock
可以参考:https://www.jianshu.com/p/afc6e0ae08b0