copyonwritearraylist,在写入时,不复制,直接加锁会咋样有啥问题么

那就白使用了CopyOnWriteArrayList了,直接使用ArrayList即可。COW的思想就是写时复制,读的时候并发。

■网友
copyonwritearraylist的实现里有一个重要的概念,就是"snapshot", 保证了读写是不冲突的,对于遍历这种重度操作, 可以极大提高吞吐, 当然代价就是要copy array(大多数据库里实现isolation属性时会用到snapshot)

如果按照你加锁的思路, copyonwritearraylist设计之初考虑的使用场景就不适合了。

■网友
这样不就降级成了sync修饰的arraylist?
■网友
【copyonwritearraylist,在写入时,不复制,直接加锁会咋样有啥问题么】 我的理解是,如果只加锁不复制,那么在写线程未释放锁时(未提交),读线程就可以读到最新的数据了,类似于数据库中的脏读。


    推荐阅读