Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
18 lines (10 loc) · 1.73 KB

File metadata and controls

18 lines (10 loc) · 1.73 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Copy-On-Write简称COW是一种用于程序设计中的优化策略其基本思路是从一开始大家都在共享同一个内容当某个人想要修改这个内容的时候才会真正把内容Copy出去形成一个新的内容然后再改这是一种延时懒惰策略从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySetCopyOnWrite容器非常有用可以在非常多的并发场景中使用到
CopyOnWriteArrayList相当于线程安全的ArrayListCopyOnWriteArrayList使用了一种叫写时复制的方法当有新元素add到CopyOnWriteArrayList时先从原有的数组中拷贝一份出来然后在新的数组做写操作写完之后再将原来的数组引用指向到新数组
这样做的好处是我们可以对CopyOnWrite容器进行并发的读而不需要加锁因为当前容器不会添加任何元素所以CopyOnWrite容器也是一种读写分离的思想读和写不同的容器
注意CopyOnWriteArrayList的整个add操作都是在锁的保护下进行的也就是说add方法是线程安全的
CopyOnWrite并发容器用于读多写少的并发场景比如白名单黑名单商品类目的访问和更新场景
和ArrayList不同的是它具有以下特性
支持高效率并发且是线程安全的
因为通常需要复制整个基础数组所以可变操作add()、set() remove() 等等的开销很大
迭代器支持hasNext(), next()等不可变操作但不支持可变 remove()等操作
使用迭代器进行遍历的速度很快并且不会与其他线程发生冲突在构造迭代器时迭代器依赖于不变的数组快照
Morty Proxy This is a proxified and sanitized view of the page, visit original site.