CopyOnWriteArrayList理解与理解
CopyOnWriteArrayList,因何而存在?
ArrayList的一个线程安全的变体,其所有可变操作(add、set 等)都是通过对底层数组进行一次新的复制来实现的,代价昂贵。
CopyOnWriteArrayList,是因”并发”而生。
CopyOnWriteArrayList,改了其中的某对象的某个值,
【场景一】对于ArrayList,使用直接方式,一边遍历,一边删除,会报错。
// 删除/修改元素for(String item : list){list.remove(item);}

解决办法一:使用迭代器,一边遍历,一边删除,不会报错。
// 删除/修改元素
Iterator<String> it = list.iterator();
while(it.hasNext()){
String ele = it.next();
it.remove();
}
http://blog.sina.com.cn/s/blog_605f5b4f0100qsgf.html
解决办法二:使用CopyOnWriteArrayList,直接方式,一边遍历,一会删除,不会报错。
for(String item : list){
list.remove(item);
}
【场景二】对于ArrayList,使用迭代器,一边遍历,一边add,会报错。
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
String tem = str + "...";
list.add(tem);
}
解决办法一:改用CopyOnWriteArrayList,直接方式,一边遍历,一边add,不会报错。
for(String item : list){
String tem = item + "...";
list.add(tem);
}
解决办法二:改用CopyOnWriteArrayList,一边遍历,一边add,不会报错。
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
String tem = str + "...";
list.add(tem);
}
【场景三】对于CopyOnWriteArrayList,迭代器,不能remove。
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
String tem = str + "...";
it.remove();
}

解决办法一:使用直接方式,一边遍历,一边add/remove()
for(String item : list){
String tem = item + "...";
list.remove(item);
list.add(tem);
}
【总结】底层究竟发生着什么?CPU、内存使用如何? to be continued…
CopyOnWriteArrayList理解与理解的更多相关文章
- 理解Javascript_01_理解内存分配
理解Javascript_01_理解内存分配 转载自:http://www.cnblogs.com/fool/archive/2010/10/07/1845226.html 在正式开始之前,我想先 ...
- 【干货理解】理解javascript中实现MVC的原理
理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...
- JS闭包深入理解(理解篇)
看书的时候很是不明白为啥变量老是五,经过认真思考的出一下理解: function box() { var arr = []; for (var i = 0; i < 5; i++) { ...
- python3 变量理解 解释器理解 常量理解 用户交互理解 逻辑运算
先来条NLP再说...... 九,每人都已经具备使自己快乐的资源 每一个人都有过成功快乐的体验,也即是说有使自己快乐的能力. 人类只用了大脑能力极少部分,提升大脑的运用,很多新的突破便会出现. 运用大 ...
- JavaScript中如何理解如何理解Array.apply(null, {length:5})
先来看一个问题: 如何理解Array.apply(null, {length:5})的{length:5}? 我测试过Array.apply(null, {length:5}) //返回[undefi ...
- Aop理解 ioc理解
AOP 把 [核心代码]和[非核心代码]分离 提高开发的效率 java设计模式: https://www.cnblogs.com/malihe/p/6891920.html N+1就是: 1:一条查询 ...
- Java常量字符串String理解 String理解
以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用 "equals" 3.Strin ...
- 《c++编程思想》关于虚函数在构造函数行为的理解,理解有误,望告知!
<c++编程思想>书上有一段话:在任何构造函数中,可能只是部分形成对象——我们只能知道基类已被初始化,但并不知道哪个类是从这个基类继承来的.然而,虚函数在继承层次上是“向前”和“向外”进行 ...
- java面试之String的理解(自我理解)
1.String是基本数据类型吗? 不是,是对象,引用数据类型 2.String是可变吗? 不可变,String是final类型的. 3.怎样比较两个字符串的值相同,怎样比较两个字符串是否为同一对象? ...
随机推荐
- codevs 1028 花店橱窗布置 (KM)
/*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #d ...
- 手机端input,select屏蔽浏览器默认事件
文本框input:当文本框focus时会弹出软键盘,有时我们需要click事件而又不想触发focus事件(不要弹出软键盘) 给input添加 disabled="disabled" ...
- 深入理解BFC和Margin Collapse
深入理解BFC和Margin Collapse BFC的理解与应用 首先我们来看看w3c规范对BFC的解释,其实对于这种概念的学习上,我们总是建议首先寻找官方的定义,因为原则上来说官方的才是最权威 ...
- Web Api学习一
接触WebApi读的第一篇文章: ASP.NET Web API(一):使用初探,GET和POST数据 实践过程中,用的Fiddler模拟Post请求时收到的对象总是为空null 解决:将文章中的内容 ...
- Ajax跨域请求中的Cookie问题(默认不带cookie等凭证)
1.原生Ajax请求方式,设置跨域请求附带详细参数 var xhr = new XMLHttpRequest(); xhr.open("POST", "http://xx ...
- Spring.net--很棒的事务处理
1--Case 比如t_Order订单表1,t_OrderDetail订单明细表2 下一张订单会往表1插入一条数据,表2会插入多行数据 使用Spring.net事务管理 例如 ---Order---订 ...
- tabpagerindictor:mergeReleaseResources FAILED Error:Execution failed for task ':tabpagerindictor:mergeReleaseResources'. > D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-mast
解决:将项目移动到路径少的目录再运行即可 异常日志: D:\android\adt-bundle-windows-x86_64-20140702\android-open-project-demo-m ...
- jquery的几种异步请求,ajax
http://blog.csdn.net/a5489888/article/details/8523316
- redis例子
http://www.cnblogs.com/edisonfeng/p/3571870.html
- Qt5中QMessageBox::warning()的第一个参数写this时出错
StandardButton QMessageBox::warning ( QWidget * parent, const QString & title, const QString &am ...