CopyOnWriteArrayList的底层原理是怎样的
-
在CopyOnWriteArrayList中,当多个线程同时对列表进行写操作时,它们不会直接修改原始列表,而是先将原始列表进行复制,然后在复制的副本上进行修改,最后再将副本替换为原始列表。这个过程中,读操作仍然直接访问原始列表,因此可以避免读写冲突。
-
多线程同时写入:add方法内部使用synchorized同步阻塞,保证同一时间只有一个线程进行写入操作。
- 当有多个线程同时读取CopyOnWriteArrayList时,它们会共享同一个原始列表对象。
- 当某个线程进行写操作时,它会先将原始列表进行复制,得到一个新的列表副本。
- 然后,该线程在新的副本上进行修改操作,例如添加、删除、修改元素等。
- 当该线程完成修改操作后,它会将新的副本替换为原始列表,以确保其他线程在读取列表时能够访问到最新的版本。
- 如果有多个线程同时进行写操作,则它们会按照先到先服务的原则依次对原始列表进行复制、修改和替换的操作。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果